阅读许多元素 - 如何避免if(...!= null)混乱? (嵌套)

时间:2018-05-07 14:40:01

标签: c# xml

我在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#中是否有等价物?

谢谢!

3 个答案:

答案 0 :(得分:7)

你听说过null-conditional (or null-propagation) operator ?吗? 你可以写出这样的陈述:

var v = document.Root?.Element("myElement")?.Attribute("myAttribute")?.Value;

因此,如果RootnullElement("myElement")返回nullAttribute("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