为什么在构造函数中未设置 FieldTwo 时,我没有收到不可为空的警告(或其他一些警告)?我使用的是 .Net 5.0,并且在项目文件中将 Nullable
选项设置为 true。
public class MyClass
{
public string FieldOne;
public long FieldTwo;
public MyClass (string p1, long p2)
{
FieldOne = p1;
// FieldTwo is not set. Where is the non-nullable warning!?
}
}
最佳答案
long
是值类型,不能为 null。所以没有理由对 null 发出警告。我怀疑你想要的是一个字段未初始化警告。
如果从未分配私有(private)字段,则会导致 CS0649 警告。但是,如果字段 public,或在类中的任何位置被修改,则不会引发此警告。例如,以下代码是完全可以接受的,并且不应发出警告:
public class MyClass{
private long myLong;
public void Increment() => myLong++;
}
如果该字段只能从构造函数中设置,则应将其声明为只读。但是,公共(public)只读字段不会触发警告,即使它们可能应该触发。请参阅Why do I NOT get warnings about uninitialized readonly fields? .
关于c# - 为什么 C# 不对不可为空的长字段发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69190532/