C# 要求对C中的属性进行空安全访问#

C# 要求对C中的属性进行空安全访问#,c#,C#,在C#中,是否有一种方法要求对属性的访问是空安全的。对于可能返回null的属性,如果在未测试null的情况下使用该属性,则最好出现编译时错误。不,这是不可能的。如果类型可为null,则无法在编译时进行此类检查。编译器无法确定在编译时检索到的值是否为null 这个代码呢?你怎么知道someVariable在什么地方没有设置为null?也许甚至可以反省一下 public string Property { get { return someVariable; } } 您应该做的是,确保属性

在C#中,是否有一种方法要求对属性的访问是空安全的。对于可能返回null的属性,如果在未测试null的情况下使用该属性,则最好出现编译时错误。

不,这是不可能的。如果类型可为null,则无法在编译时进行此类检查。编译器无法确定在编译时检索到的值是否为null

这个代码呢?你怎么知道
someVariable
在什么地方没有设置为null?也许甚至可以反省一下

public string Property
{
    get { return someVariable; }
}

您应该做的是,确保属性从不为null,或者作为消费者,以正确处理这些情况。

其发明人将null引用保留为“”!在中,使用和可最小化空引用异常。

他们正在考虑将不可空引用添加到C#的未来版本中,在这一点上,可空引用可能会得到更多的编译器警告。没有内置的这种东西,但您可以使用诸如ReSharper之类的插件,它会在编译时警告您此类情况。没有。您可能会使用静态分析工具。这里有一个很好的列表:很高兴听到那些工具的用户的声音。也许这些警告太过冗长,以至于没有人打开这个选项。感谢@Damien_the_unsiever,一个关于“对未来C#版本的不可空引用”的快速谷歌让我想到了,这似乎是我问题的当前答案。“不可能”是一个非常有力的说法。如果编辑器可以枚举对标识符的所有引用,它肯定可以循环遍历这些引用,以查看它们是否为1)空安全2)显式测试为空或3)如果为空将抛出。(我不是反对者)不,这是不可能的,因为你不能进行这样的分析,因为你不知道涉及的外部因素,比如反射。问题不是问编译器是否可以检查变量是否为空,而是问编译器是否可以检查变量是否在没有空检查的情况下使用。