[英]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.