是否可以避免此代码中的多个IF?

pod*_*eig 2 c# if-statement

我有这种代码和平.我必须检查XML中的每个级别,避免NULL异常.我可以改进这段代码吗?

private void GetFunctionsValues(XElement x)
    {
        if (x.Element("credentials") != null)
        {
            if (x.Element("credentials").Element("faccess") != null)
            {
                foreach (var access in x.Element("credentials").Element("faccess").Elements("access"))
                {
                    if (access.Attribute("db_id") != null)
                    {
                        if (int.Parse(access.Attribute("db_id").Value) == 19) FuncPlus = true;
                    }
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Fel*_*ano 5

你可以将两个嵌套if在一个中:

if (x.Element("credentials") != null && x.Element("credentials").Element("faccess") != null )
Run Code Online (Sandbox Code Playgroud)

第一个评估为false会阻止第二个执行,因此没有空引用异常.这种行为通常被称为"短路评估":程序很快就会理解它可以跳过if,它会停止评估剩余部分.