Измените это условие, чтобы оно не всегда оценивалось как «ложное» - PullRequest
3 голосов
/ 31 мая 2019

Во время анализа SonarQube мы видим много примеров этого предупреждения

Измените это условие, чтобы оно не всегда оценивалось как «ложное»; некоторый последующий код никогда не выполняется.

Итак, один пример, где это происходит - для данного кода ...


    if (components?.ContainsKey(machineType) ?? false)
    {
        return components[machineType];
    }

    throw new ArgumentException($"There is no available configuration for {machineType}!");

... мы получаем ...

enter image description here

Мы используем объединение нулей в C # для кратковременных нулевых проверок, так что предоставление components, который является словарем, не null, а components содержит указанный ключ на machineType затем мы возвращаем значение в словаре components для клавиши machineType.

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

Пожалуйста, кто-нибудь может объяснить, почему SonarQube жалуется на это. Если мы переписываем это, чтобы использовать «старомодный» многословный стиль проверки на нуль и && ing, то SonarQube будет счастливым зайчиком.

Это просто, что SonarQube не понимает оператор ???

Или мы просто злоупотребляем операторами ?. или ?? в таких утверждениях?

...