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

hierarchical-data with possible null object

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

我想要这样的东西:

_data = record.RltdPties.DbtrAcct.Id.Item

如果此子对象之一为空,则数据也应为空。有没有更好的方法来验证我的对象而不是这个:

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

我可以做一个 try{} catch{} 块,但这不是一个好的解决方案。

使用 c# 5.0

_data = record?.RltdPties?.DbtrAcct?.Id?.Item

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

你的情况是 _data = record?.RltdPties?.DbtrAcct?.Id?.Item

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

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