== Why is this an issue? include::../description.adoc[] In the case below, the call of `Dispose()` never happens. [source,csharp] ---- var a = false; if (a) { Dispose(); // Never reached } ---- === Exceptions This rule will not raise an issue in either of these cases: * When the condition is a single `const bool` + [source,csharp] ---- const bool debug = false; //... if (debug) { // Print something } ---- * When the condition is the literal `true` or `false`. In these cases, it is obvious the code is as intended. == How to fix it The conditions should be reviewed to decide whether: * to update the condition or * to remove the condition. === Code examples ==== Noncompliant code example [source,csharp,diff-id=1,diff-type=noncompliant] ---- public void Sample(bool b) { bool a = false; if (a) // Noncompliant: The true branch is never reached { DoSomething(); // Never reached } if (!a || b) // Noncompliant: "!a" is always "true" and the false branch is never reached { DoSomething(); } else { DoSomethingElse(); // Never reached } var c = "xxx"; var res = c ?? "value"; // Noncompliant: c is always not null, "value" is never used } ---- ==== Compliant solution [source,csharp,diff-id=1,diff-type=compliant] ---- public void Sample(bool b) { bool a = false; if (Foo(a)) // Condition was updated { DoSomething(); } if (b) // Parts of the condition were removed. { DoSomething(); } else { DoSomethingElse(); } var c = "xxx"; var res = c; // ?? "value" was removed } ---- include::../see.adoc[] === Documentation * Microsoft Learn - https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/boolean-logical-operators#conditional-logical-and-operator-[Conditional logical AND operator &&] * Microsoft Learn - https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/boolean-logical-operators#conditional-logical-or-operator-[Conditional logical OR operator ||] * Microsoft Learn - https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator[?? and ??= operators - the null-coalescing operators] ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message * Change this condition so that it does not always evaluate to "[true|false]". Some code paths are unreachable. * Change this expression which always evaluates to the same result. Some code paths are unreachable. include::../highlighting.adoc[] ''' == Comments And Links (visible only on this page) include::../comments-and-links.adoc[] endif::env-github,rspecator-view[]