我有一个很大的分层对象,我想从这个结构中获得一个属性。问题是,该对象的每个级别都可以为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 {}阻止,但这不是一个好的解决方案。
答案 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
在您的情况下,它将是_data = record?.RltdPties?.DbtrAcct?.Id?.Item