Null检查嵌套对象

时间:2013-07-26 17:23:35

标签: c# null

我有几个由API返回的普通旧C#对象,并且在其中嵌套了几层POCO。我需要访问这些结构中包含的字段,但是因为当数据丢失时,API将这些嵌套对象保留为null,所以我发现自己必须进行大量的空检查才能进入我真正想要的字段。

if(obj != null && obj.Inner != null && obj.Inner.Innerer != null) { ... }

我提出的最短形式是使用三元运算符。

obj != null && obj.Inner != null && obj.Inner.Innerer != null ? obj.Inner.Innerer.Field : null;

C#有没有办法做到这一点而不必写出所有这些比较?我真的很喜欢简短的东西:

obj.Inner.Innerer.Field ?? null;

但是只检查Field为null。

2 个答案:

答案 0 :(得分:1)

请看一下这个非常聪明和优雅的解决方案:

http://www.codeproject.com/Articles/109026/Chained-null-checks-and-the-Maybe-monad

答案 1 :(得分:0)

它并不漂亮,但您可以在代码中编写访问器函数来封装null检查,因此您只需在一个地方执行此操作。 E.g。

Innerer GetInnerer()
{
  if(obj != null && obj.Inner != null && obj.Inner.Innerer != null)
  {
    return obj.Inner.Innerer;
  }

  return null;
}

这样你就可以这样称呼它:if (myObject.GetInnerer() != null)...。你必须创建许多这些函数,但至少它会将null检查的'goreyness'移动到一个位置。