【发布时间】:2020-05-11 04:17:16
【问题描述】:
有没有办法检查EventCallback 是否已设置为某个值。我将我的设置在组件外部,如果已设置 EventCallback,则只想在组件内部显示某些内容。
【问题讨论】:
标签: blazor
有没有办法检查EventCallback 是否已设置为某个值。我将我的设置在组件外部,如果已设置 EventCallback,则只想在组件内部显示某些内容。
【问题讨论】:
标签: blazor
您可以在 EventCallback 参数上使用 HasDelegate 属性。这将返回一个布尔值,指示事件调度程序是否为非空
[Parameter]
public EventCallback DoSomething { get; set; }
private bool IsEventSet => DoSomething.HasDelegate;
【讨论】:
EventCallBack 是一个结构体。我期待同样的事情,例如检查 EventCallBack 是否不为空的方法,但由于它是一个结构,如果未设置 EventCallback.InvokeAsync() 不会引发错误,这违背了我大脑中的 C# 编译器。
在此示例中,如果错误处理程序未设置为某个值,则永远不会引发异常,因为 Struct 不能为空。对我来说有点违反逻辑,但它没有什么可调用的,因此不会引发错误。
[Parameter] public EventCallback<string> OnReset { get; set; }
private void ResetFinished()
{
try
{
// Notify the client the Reset button was clicked.
OnReset.InvokeAsync("Reset");
}
catch (Exception error)
{
// for debugging only
string err = error.ToString();
}
}
【讨论】:
HasDelegate 将是 false 如果什么都没有通过。但是,如果您想在某些情况下传递EventCallback.Empty 之类的东西,而在其他情况下真正的回电HasDelegate 将是true。奇怪的行为恕我直言。