C# 如何避免NullReferenceException?

C# 如何避免NullReferenceException?,c#,C#,如果我写 public MyObject TheObject {get; set;} 然后尝试访问myClassObject.TheObject.SomeProperty如果对象为空,我会得到一个NullReferenceException。但是如果对象可以为空或具有默认值,如何声明对象属性以避免NRE 不确定我是否正确解释了我的担忧。以下是我正在努力安全地做的事情。这样做的最佳实践是什么 class PowerfullPin { public string Id { get; set

如果我写

public MyObject TheObject {get; set;}
然后尝试访问
myClassObject.TheObject.SomeProperty如果
对象
为空,我会得到一个NullReferenceException。但是如果
对象
可以为空或具有默认值,如何声明
对象
属性以避免NRE

不确定我是否正确解释了我的担忧。以下是我正在努力安全地做的事情。这样做的最佳实践是什么

class PowerfullPin
{
    public string Id { get; set; }
}

class Test
{
    public PowerfullPin PowerfullPin { get; set; }
}

class Main
{
    Main()
    {
        Test Test = new Test();
        //If PowerfullPin was not define it throws a NullReferenceException 
        System.Diagnostics.Debug.WriteLine(Test.PowerfullPin.Id); 
    }
}

如果使用c#6或更高版本,请尝试使用null条件运算符。它用于在执行成员访问(?)或索引(?[)操作之前测试null


如果使用c#6或更高版本,请尝试使用null条件运算符。它用于在执行成员访问(?)或索引(?[)操作之前测试null


您正在访问null对象的属性。创建测试对象时,测试类中的PowerfullPin为null

所以你可以像这样做

Test test = new Test();
//While creating object of Test class you will have PowerfullPin 
//property but it has not been initialized. That means it is null. 
//You can not have properties of null object.
test.PowerfullPin = new PowerfullPin{
 Id = 1,
 SomeOtherProperty = "Value"
};
 System.Diagnostics.Debug.WriteLine(test.PowerfullPin.Id);

您正在访问null对象的属性。创建测试对象时,测试类中的PowerfullPin为null

所以你可以像这样做

Test test = new Test();
//While creating object of Test class you will have PowerfullPin 
//property but it has not been initialized. That means it is null. 
//You can not have properties of null object.
test.PowerfullPin = new PowerfullPin{
 Id = 1,
 SomeOtherProperty = "Value"
};
 System.Diagnostics.Debug.WriteLine(test.PowerfullPin.Id);


安全?你在说什么?你的计算机会爆炸吗?但说真的,我不明白。@rory.ap我相信OP的意思是如何防止属性上的空引用。这可能是德米特定律的一个有趣例子。@SunLiker67是的,就是这样。这是一篇我发现非常有用的文章:安全?你在说什么?你的计算机会爆炸吗?但说真的,我不明白。@rory.ap我相信OP的意思是如何防止属性上的空引用。这可能是一个有趣的德米特定律的重复。@SunLiker67是的,就是这样。这是一篇我发现非常有用的文章:它取决于net版本的OP是using@BRAHIMKamel我在回答中提到,OP没有指定任何版本。您应该解释空条件运算符在问题中的作用,而不是依赖链接进行解释。@BRAHIMKamel不,没有。这取决于C#的版本,而不是框架。@BRAHIMKamel您不需要o正如我所说的,你可以使用C#6.0。不过,你可以用这个程序针对任何你想要的.NET框架,因此,与你的评论相反,你需要使用的.NET框架没有任何限制。这取决于OP的.NET版本using@BRAHIMKamel我在回答中提到,OP没有指定任何版本。你应该解释一下空条件运算符在您的问题中起作用,而不是依赖于链接来解释。@BRAHIMKamel不,它不起作用。它取决于C#的版本,而不是框架。@BRAHIMKamel您需要C#6.0,正如我所说的。您可以使用程序针对任何.NET框架,所以不,对框架没有约束。NET框架,您需要使用,与您的评论相反。