C#:安全无误地遍历嵌套属性

C#: Go through Nested Properties Safely without Error

我正在查看反射元数据属性,并将某些属性添加到 API 控制器中的所有操作。先检查Level 1的属性,看是否存在,然后再检查Level 2的属性。

Sonarqube 在下方发出警告。问题是,我想在下一个之前安全地检查 1 个级别,否则程序会产生错误。如果在运行时在 1 行中组合多个 if 语句,编译器会不会突然打乱 if 语句的顺序,从而出错?进行此操作的安全方法是什么?此外,如果人们重构代码,是否会使代码序列更清晰?

Warning: Merge this if statement with the enclosing one.

foreach (ActionModel action in controller.Actions)
{
    if (action.ActionMethod.ReturnType.GenericTypeArguments.Any())   // Level 1 
    {
        if (action.ActionMethod.ReturnType.GenericTypeArguments[0].GetGenericArguments().Any())  //Level 2
        {
            returnType = action.ActionMethod.ReturnType.GenericTypeArguments[0].GetGenericArguments()[0];
        }
    }

不会有不可预测性。

合并 if 语句后,条件语句将如下所示:

expr1 && expr2

使用运算符&&,表达式总是从左到右求值。如果 expr1 的计算结果为 false,那么 expr2 将永远不会被计算。