Во время анализа SonarQube мы видим много примеров этого предупреждения
Измените это условие, чтобы оно не всегда оценивалось как «ложное»;
некоторый последующий код никогда не выполняется.
Итак, один пример, где это происходит - для данного кода ...
if (components?.ContainsKey(machineType) ?? false)
{
return components[machineType];
}
throw new ArgumentException($"There is no available configuration for {machineType}!");
... мы получаем ...
Мы используем объединение нулей в C # для кратковременных нулевых проверок, так что предоставление components
, который является словарем, не null
, а components
содержит указанный ключ на machineType
затем мы возвращаем значение в словаре components
для клавиши machineType
.
В противном случае, если components
равно нулю, или , если в Словаре нет ключа, выражение оценивается как false
, и мы не вводим блок и вернуть значение, но вместо этого мы выдаем исключение.
Пожалуйста, кто-нибудь может объяснить, почему SonarQube жалуется на это. Если мы переписываем это, чтобы использовать «старомодный» многословный стиль проверки на нуль и &&
ing, то SonarQube будет счастливым зайчиком.
Это просто, что SonarQube не понимает оператор ??
?
Или мы просто злоупотребляем операторами ?.
или ??
в таких утверждениях?