具有可能的空对象的分层数据
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
}
我有一个很大的分层对象,我想要这个结构中的一个属性。问题是,该对象的每个级别都可能为空。 (这是来自结构化 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
}