在SonarQube的分析过程中,我们看到了许多此警告的示例
更改此条件,以使其始终不等于“ false”; 某些后续代码将永远不会执行。
一个发生这种情况的例子是-对于给定的代码...
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
为null,或,或者如果词典不包含键,则表达式的值为false
,而我们不这样做不会进入代码块并返回值,但是我们抛出异常。
请有人可以解释为什么SonarQube对此有所抱怨。如果我们将其重写为使用“老式”的空检查和&&
ing的冗长样式,那么SonarQube就是一个快乐的兔子。
SonarQube是否仅不了解??
运算符?
还是我们只是在这样的语句中滥用?.
或??
运算符?