一种更好的方法来处理对象层次中的空引用

squ*_*uig 4 .net null nullreferenceexception

我正在寻找一种很好的方法来处理对象层次结构中的空引用.

即:

if(null == Object1.Object2.Object3.Property)
Run Code Online (Sandbox Code Playgroud)

如果说Object2为null,则此示例将抛出Null Reference异常.

在我的情况下,我不在乎什么是null,只是有些东西.我真的不想在我希望做这样的事情的每个地方放置尝试/捕获,所以我一直在寻找替代方案.

我试过了?? 运算符,但这会在两个级别之后产生一些难看的代码.

任何想法都赞赏.

Gis*_*shu 6

现在这可能正在切线......但我建议改变设计以避免丑陋和痛苦

电话Object1.Object2.Object3.Property违反了得墨忒耳法律.相反,如果你应该到达那个属性,Object1应该公开一个Property本身...所以你应该调用Object1.RetrievedFromTheDepthsProperty
为什么这是需要的..如果Type Object2的设计者改变了''返回的Object的类型Object3'字段/属性为没有您正在寻找的属性的那个,您将被清除.客户端对Object1的内部结构了解太多.如果将Object1封装在数据位于内部的位置,则可以安全地防范将来的更改.此属性也可以根据需要在内部执行所有空值检查...让您更清洁

if (Object1.RetrievedFromTheDepthsProperty == null) {...}
Run Code Online (Sandbox Code Playgroud)