我在C#项目中使用Microsoft Linq读取xml文件。我从xml文档中访问数据,如下所示:
document.Root.Element("myElement").Attribute("myAttribute").Value
我收到警告,这可能会导致NullReferenceException
。我必须检查null
)(对于我想要阅读的每个元素和属性)。
但是,我不希望有很多嵌套if检查,如下所示:
if (... != null) {
if (... != null) {
if (... != null) {
if (... != null) {
if (... != null) {
...
}
}
}
}
}
这很快就变丑了。在C#
中有更好的方法吗?在Swift
中,有一种称为guard statement的东西,在这种情况下是理想的。它还允许“强行打开”#34;这些东西告诉编译器这不可能是空的。 C#中是否有等价物?
谢谢!
答案 0 :(得分:7)
你听说过null-conditional (or null-propagation) operator ?
吗?
你可以写出这样的陈述:
var v = document.Root?.Element("myElement")?.Attribute("myAttribute")?.Value;
因此,如果Root
为null
或Element("myElement")
返回null
或Attribute("myAttribute")
返回null
,则结果为null
答案 1 :(得分:0)
为避免这种情况,我通常使用这种模式:
if(... == null)
break; // or continue; // or return; // depends on the context
if(... == null)
break; // or continue; // or return; // depends on the context
...
这会将此链分解为一系列空检查
答案 2 :(得分:-1)
您可以使用
if( ... !=null && ...!=null && ...!=null...)
或尝试捕捉 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/try-catch