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

IE:

if(null == Object1.Object2.Object3.Property)

如果说 Object2 为空,则此示例将引发空引用异常。

在我的情况下,我不在乎什么是空的,只是有些东西是。
我真的不想在我想做这样的事情的每个地方都放置 try/catchs,所以我一直在寻找替代方案。

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

任何想法表示赞赏。

最佳答案

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

调用 Object1.Object2.Object3.Property 违反了 law of demeter 。相反,如果您应该访问该属性,则 Object1 应该公开一个属性本身...所以您应该调用 Object1.RetrievedFromTheDepthsProperty为什么需要这样做.. 是因为如果类型 Object2 的设计者将“Object3”字段/属性返回的对象类型更改为没有您正在寻找的属性的类型,您将被灌输。客户端对 Object1 的内部结构了解太多。如果 Object1 封装了内部数据所在的位置,那么您就可以安全地防止将来发生更改。此外,此属性可以根据需要在内部进行所有空检查...让您更干净

if (Object1.RetrievedFromTheDepthsProperty == null) {...}

关于.net - 在对象层次结构中处理空引用的更好方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/759407/

10-11 16:56