C#: Go через вложенные свойства безопасно, без ошибок - PullRequest
1 голос
/ 09 января 2020

Я просматриваю свойства метаданных отражения и добавляю определенные атрибуты ко всем действиям в API Controller. Сначала проверьте уровень 1 свойств, посмотрите, существует ли он, а затем предшествуйте уровню 2 свойств.

Sonarqube выдает предупреждение ниже. Дело в том, что я хочу безопасно проверить 1 уровень, прежде чем переходить к следующему, иначе программа выдаст ошибку. Если объединение нескольких операторов if в одну строку во время выполнения, не может ли компилятор внезапно зашифровать последовательность операторов if, что приводит к ошибке? Какой безопасный способ это сделать? Кроме того, если люди занимаются рефакторингом кода, делает ли он последовательность кода более разборчивой?

Предупреждение. Объедините этот оператор if с прилагаемым.

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];
        }
    }

1 Ответ

2 голосов
/ 09 января 2020

Не будет непредсказуемости.

После объединения операторов if условие будет выглядеть следующим образом:

expr1 && expr2

С оператором && выражения всегда вычисляются из слева направо. Если expr1 оценивается как false, то expr2 никогда не будет оцениваться.

...