在 Blazor 组件中使用@ref时"Cannot convert null literal to non-nullable reference type"



我理解非空类型的概念,并尽可能使用它们,但遇到了不知道该怎么做的情况。

如果我创建了一个Blazor组件(内容无关,因此没有显示),并且希望在代码中引用它,我可以为它添加一个私有变量。因为我知道Blazor将为它分配一个值,我可以告诉编译器不要担心它是非空的,但我还没有设置一个初始值…

private MyComponent _myComponent = null!;

然后我可以在标记中使用@ref,它将用对组件的引用填充变量…

<MyComponent @ref="_myComponent" />

但是,Visual Studio在这一行的最后部分给出了一条绿色的波浪线,并且警告">不能将空文字转换为不可空的引用类型"。

我不知道如何解决这个问题。我甚至不确定这个警告是什么意思,因为我告诉编译器变量不会为空。

谁能解释一下a)我在这里做错了什么,b)我应该怎么做?由于

代替你(可以理解)说你不想使用的= null!;,不如…

private MyComponent _myComponent = new();

显然只有在构造函数不带任何参数的情况下才有效。如果是这样,就必须为它们添加一些虚拟值。这不是问题,因为框架会用对实际表单的引用覆盖您的值,并且它确实解决了您的问题。

试试这个:

private CptVendor? _myComponent = null!;