.NET 8 和 Blazor 组件可空警告 @ref

问题描述 投票:0回答:1

据我了解,隐藏服务空警告的推荐方法如下:

[Inject] private IExampleService ExampleService { get; set; } = default!;

https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/dependency-injection?view=aspnetcore-6.0#request-a-service-in-a-component

我想知道这是否同样适用于在代码后面使用

@ref
表示法给出引用的组件,或者是否应该以不同的方式处理?

例如使用 DevExpress 组件:

<DxButton Text="Button" @ref=ExampleButton />

@code {
    private DxButton ExampleButton { get; set; }  = default!;
}

如果我正确理解这一点,渲染器会在渲染后填充

ExampleButton
属性,因此如果在
OnInitialized()
方法中使用该属性,则可能会出现空异常,因此我不确定
!default
是否是正确的方法。

我希望 DevExpress 本身能有一些关于此的文档,但是我找不到任何东西。

asp.net-core null blazor compiler-warnings devexpress-blazor
1个回答
0
投票

= default!;
仍然分配空值但忽略空警告。如果你想使用它的属性,你仍然可能会遇到异常。我建议使用

private DxButton ExampleButton { get; set; }  = new();

然后每个属性都会被初始化。

例如,以下代码将抛出异常。

<DxButton Text="Button" @ref=mybutton></DxButton>

@code{
    public DxButton mybutton = default!;

    protected override async Task OnInitializedAsync()
    {
         //will throw null exception.
        var test = mybutton.SizeMode;
    }
}

但是当你使用

=new();
时,就不会有任何问题了。

© www.soinside.com 2019 - 2024. All rights reserved.