在我们的架构中,我们有一个方法,它总是在调用任何其他方法之前被调用。此方法用于初始化构造对象时不可用的引用。
这是此类的一个示例:
#nullable enable
public class MyClass
{
private MyReference _reference; // this shows a warning
public MyClass() { }
public void Activate()
{
_reference = new MyReference();
}
}
现在我收到关于私有字段的警告,因为它没有在构造函数中初始化(这是有道理的)。
我已经尝试过两种解决方案,但它们不太适合我:
Activate
中初始化的所有字段标记为 = null!
。这消除了错误,但是我们不会在任何地方强制执行实际初始化。我的问题如下:是否有任何属性或方法可以使此示例正常工作,当我的类字段的初始化发生在构造函数之外时,我会得到强制初始化(通过编译器警告)
编辑:修复问题的格式
不太确定您到底想在这里实现什么目标......
如果您只想消失警告,可以这样做:
[NotNull]
private MyReference? _reference;
您将不再看到错误,当您将其标记为可为空时,您承诺它永远不会为空。这意味着如果你要做这样的事情:
If (_reference == null)
它会告诉你,由于你的承诺,它总是假的。
如果您想确保在使用该类之前调用
Activate()
,请考虑使用 get 方法。
public MyReference GetReference()
{
return _reference is null ? Activate() : _reference;
}
这里我假设
Activate()
返回创建的值,但在您的示例中并非如此,您可以更改它,或者让 getter 在调用 Activate()
后返回变量