首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查obj.pro1.pro2.pro3.pro4.pro5值是否为空

检查obj.pro1.pro2.pro3.pro4.pro5值是否为空
EN

Stack Overflow用户
提问于 2016-03-09 16:45:34
回答 1查看 70关注 0票数 1

但是,如果我有一个obj,并且我想使用prop5获得obj.prop1.prop2.prop3.prop4.prop5,如果它是null,我可以返回一个'null‘。

如果obj.pro1.pro2为空,它将为prop3抛出一个异常。因此,我必须有一堆if-null语句来检查每个属性是否为空。有更快的出路吗?

Tl博士:太多的if语句,我能减少吗?

目前的代码,我只想将其简化为一些更简单的东西(而不是一堆if或和语句):

代码语言:javascript
复制
if(obj != null)
 if(obj.prop1 != null)
  if(obj.prop1.prop2 != null)
  .
  .
  .
     if(obj.pro1.prop2.prop3.prop4.prop5 ! = null)
         //do something
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-09 16:53:31

如果您使用的是C# 6,这可以在一个条件下完成:

代码语言:javascript
复制
if(obj?.prop1?.prop2?.prop3 != null)
    // do something

否则,你就会被条件限制所困。(或者是一系列卫士子句,而不是嵌套条件,这取决于你想要完成什么。)

请注意,在许多情况下,深入检查对象的属性甚至可能首先表明设计问题。从所给出的简化示例中无法判断,但是您可以通过封装对象本身上所寻找的内容来使使用代码更加简洁。

例如,用于obj的类可能具有以下内容:

代码语言:javascript
复制
public SomeType SomeProperty()
{
    get
    {
        // nest your conditionals here, return null if the deeply nested value is null
    }
}

(也可能是一种方法,或者嵌套类型也有这样的属性/方法,等等。有很多方法可以这样做。)

在消费代码中:

代码语言:javascript
复制
if (obj.SomeProperty != null)
    // do something

关键在于,将逻辑封装在对象本身上,可以使使用代码更清晰地读取,并将对哪些对象负责的各种关注点分离开来。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35897576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档