具有可能的空对象的分层数据

时间:2015-08-04 11:51:45

标签: c# nullreferenceexception hierarchical-data

我有一个很大的分层对象,我想从这个结构中获得一个属性。问题是,该对象的每个级别都可以为null。 (它是来自结构化XML的数据)

我想要这样的事情:

_data = record.RltdPties.DbtrAcct.Id.Item

如果其中一个子对象为null,则数据也应为null。有没有更好的方法验证我的对象而不是:

if(record!=null && record.RltdPties != null && record.RltdPties.DbtrAcct != null && record.RltdPties.DbtrAcct.Id != null)
{
     _data = record.RltdPties.DbtrAcct.Id.Item
}

我可以尝试{} catch {}阻止,但这不是一个好的解决方案。

3 个答案:

答案 0 :(得分:2)

使用c#5.0

{{1}}

答案 1 :(得分:1)

我认为try-catch-block在这里是绝对正确的解决方案,因为你必须检查整个树,看起来在对象的路径中没有任何可能的分支。它可能不像C#,但有时候EAFP(更容易要求原谅而非许可)使它保持足够简单。

try 
{
  _data = record.RltdPties.DbtrAcct.Id.Item
}
catch NullReferenceException
{
  // do whatever then to do
}

答案 2 :(得分:0)

如果可以使用C#6.0,则可以使用null条件运算符。 http://www.codeproject.com/Articles/850832/What-s-new-in-Csharp-Null-conditional-operators

enter image description here

在您的情况下,它将是_data = record?.RltdPties?.DbtrAcct?.Id?.Item