繁体   English   中英

如何转换EventCallback <T> 到EventCallback <bool>

[英]How to convert EventCallback<T> to EventCallback<bool>

Blazor有一个名为EventCallback的通用类

我该如何投放

protected EventCallback<T> ValueChanged { get; set; }

EventCallback<bool> BoolChanged
   {
     get
     {
       if (typeof(T) == typeof(bool))
         return ValueChanged; //<== Error needs cast some how?
     }
   }

@Steven,以下代码可以表示和澄清您的问题吗?

假设我有以下组件

@*Parent.razor*@

@page "/Parent"

<div>
    <Child Data="@Data" ValueChanged="@ValueChanged">
    </Child>
</div>

@functions {
    List<Item> Data = new List<Item>();

    private void ValueChanged(Item item)
    {        
    }
}


    @*Child.razor*@

@typeparam TData

<div>
    @foreach (var item in Data)
    {
        <button onclick="@(() => ValueChanged.InvokeAsync(item))"></button>
    }
</div>

@functions {
    [Parameter]
    public IEnumerable<TData> Data { get; set; }

    [Parameter]
    protected EventCallback<TData> ValueChanged { get; set; }
}




  // Item.cs
public class Item
{
     public Item()
     {

     }
}

如您所见,我有两个组件,并且正在将泛型(typeparam)与EventCallback一起使用...现在,我想用一个get访问器定义EventCallback属性,该访问器检查TData的类型是否为bool,如果是,则为隐蔽式ValueChanged委托给EventCallback

EventCallback<bool> BoolChanged { 
    get 
    { 
       if (typeof(TData) == typeof(bool)) return ValueChanged; // Needs conversion, but how
    } 
 } 

你有没有尝试过

(EventCallback<bool>)ValueChanged;

在这种情况下,请确保ValueChanged类型为EventCallback<bool>

感谢Levi Broderick通过Twitter获得的答案。

protected EventCallback<bool> BoolChanged => (EventCallback<bool>)(object)ValueChanged;

他指出:弹跳转换对象基本上是C#惯用语,因为“我知道编译器在编译时无法对此进行推理,但无论如何在运行时尝试一下,我接受可能会发生异常。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM