但是,如果我有一个obj,并且我想使用prop5获得obj.prop1.prop2.prop3.prop4.prop5,如果它是null,我可以返回一个'null‘。
如果obj.pro1.pro2为空,它将为prop3抛出一个异常。因此,我必须有一堆if-null语句来检查每个属性是否为空。有更快的出路吗?
Tl博士:太多的if语句,我能减少吗?
目前的代码,我只想将其简化为一些更简单的东西(而不是一堆if或和语句):
if(obj != null)
if(obj.prop1 != null)
if(obj.prop1.prop2 != null)
.
.
.
if(obj.pro1.prop2.prop3.prop4.prop5 ! = null)
//do something发布于 2016-03-09 16:53:31
如果您使用的是C# 6,这可以在一个条件下完成:
if(obj?.prop1?.prop2?.prop3 != null)
// do something否则,你就会被条件限制所困。(或者是一系列卫士子句,而不是嵌套条件,这取决于你想要完成什么。)
请注意,在许多情况下,深入检查对象的属性甚至可能首先表明设计问题。从所给出的简化示例中无法判断,但是您可以通过封装对象本身上所寻找的内容来使使用代码更加简洁。
例如,用于obj的类可能具有以下内容:
public SomeType SomeProperty()
{
get
{
// nest your conditionals here, return null if the deeply nested value is null
}
}(也可能是一种方法,或者嵌套类型也有这样的属性/方法,等等。有很多方法可以这样做。)
在消费代码中:
if (obj.SomeProperty != null)
// do something关键在于,将逻辑封装在对象本身上,可以使使用代码更清晰地读取,并将对哪些对象负责的各种关注点分离开来。
https://stackoverflow.com/questions/35897576
复制相似问题