C# Blazor中EventCallback可空后无法解析InvokeAsync符号问题
Blazor组件EventCallback可空时InvokeAsync编译报错的解决办法
问题根源
EventCallback是值类型(struct),并非引用类型。当你给它加上?声明为可空时,实际是将其包装成了Nullable<EventCallback<Person>>类型。而Nullable<T>结构体并没有InvokeAsync方法,所以编译器会提示“Cannot resolve symbol 'InvokeAsync'”。
两种解决办法
办法一:保留可空声明,调整调用逻辑
如果一定要声明为可空,需要先通过HasValue判断是否有值,再通过Value属性获取实际的EventCallback实例调用方法:
// 可空参数声明 [Parameter] public EventCallback<CommonSolution.Entities.Person>? onClick { get; set; } // 调用代码 if (onClick.HasValue) { await onClick.Value.InvokeAsync(this.targetPerson); }
办法二:推荐写法——不声明可空,用HasDelegate判断
EventCallback作为值类型,默认值是EventCallback.Empty,本身不存在null的情况。官方推荐用它自带的HasDelegate属性判断是否绑定了实际的回调逻辑,代码更简洁规范:
// 非可空参数声明 [Parameter] public EventCallback<CommonSolution.Entities.Person> onClick { get; set; } // 调用代码 if (onClick.HasDelegate) { await onClick.InvokeAsync(this.targetPerson); }
内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD
相关产品推荐
相关产品推荐

