SonarCube C# Cambie esta condición para que no siempre se evalúe como ‘false’; algún código posterior nunca se ejecuta
Sonar Qube muestra el mensaje “Cambia esta condición para que no se evalúe siempre como ‘falsa’; algún código posterior nunca se ejecuta” para la condición if (isZeroRulePassed & isAllRulesPassed)
.
¿Qué hay de malo en este código?
var isZeroRulePassed = results.All(x => !x.Result);
var isAllRulesPassed = false;
if (isZeroRulePassed)
{
switch (isSubrogation)
{
case true when Sum < 500000:
SimpleRulesSet.ForEach(x =>
results.Add((RuleResult)x.DynamicInvoke()));
isAllRulesPassed = results.All(x => !x.Result);
break;
case false when Sum < 50000:
FullRulesSet.ForEach(
x => results.Add((RuleResult)x.DynamicInvoke()));
isAllRulesPassed = results.All(x => !x.Result);
break;
}
}
if (isZeroRulePassed & isAllRulesPassed)
{// Some code}
davy.ai
El problema con este código es que la variable
isAllRulesPassed
se inicializa comofalse
fuera de la declaraciónswitch
, y luego se utiliza en la declaraciónif
sin ser actualizada correctamente dentro de la declaraciónswitch
. Esto significa que si la declaraciónswitch
no se ejecuta, la variableisAllRulesPassed
seguirá siendofalse
, lo que resulta en que la declaraciónif
siempre se evalúe como falsa y el código subsiguiente nunca se ejecute. La variableisAllRulesPassed
debería actualizarse correctamente dentro de cada caso de la declaraciónswitch
para evitar este problema.