Blazor 组件中的 Nullable 参数给出“可能的 null 引用分配”警告

Nullable parameter in Blazor component gives "Possible null reference assignment" warning

提问人:Daniel Jonsson 提问时间:7/25/2023 更新时间:7/25/2023 访问量:183

问:

我正在使用 .NET 7,并且我有以下两个 Blazor 组件:

Child.razor:

@using System.Xml.Linq

<h3>Child</h3>

@code {
    [Parameter]
    public Func<XElement, Task<bool>>? OnDraft { get; set; }
}

Parent.razor:

@using System.Xml.Linq

<h3>Parent</h3>

<Child OnDraft="@OnDraft" />

@code {
    public Func<XElement, Task<bool>>? OnDraft { get; set; }
}

但是,在 Visual Studio 中,我在第 5 行收到一条警告,说:Parent.razorPossible null reference assignment

enter image description here

当参数和参数都具有相同的可为 null 类型时,为什么会发生这种情况?

C# Blazor-Server-Side NullReferenceException

评论


答:

0赞 MrC aka Shaun Curtis 7/25/2023 #1

我可以解释一下。

你在这里处理的是 Razor 代码,而不是纯 C#。

当 Razor 编译器生成此代码时,相关赋值行如下所示:

__builder.AddAttribute(9, "OnDraft", (object)((global::System.Func<System.Threading.Tasks.Task<System.Boolean>>)(
#nullable restore
#line 11 "C:\Users\shaun\Documents\GitHub\Blazr\Blazr.Components\src\Components\SO76757934\SO76757934\Pages\Index.razor"
 this.OnDraft

#line default
#line hidden
#nullable disable
)));

请注意可为 null 的指令。期望是启用了。OnDraftSystem.Func<System.Threading.Tasks.Task<System.Boolean>>nullable

因此发出警告。为什么?您需要询问 Razor 团队。

2赞 Daniel Jonsson 7/25/2023 #2

解决方法似乎是改变:

<Child OnDraft="@OnDraft" />

自:

<Child OnDraft="@(OnDraft!)" />

现在没有更多的警告:

enter image description here