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
将永远不会被计算。
我正在查看反射元数据属性,并将某些属性添加到 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
将永远不会被计算。