== Why is this an issue?

include::../description.adoc[]

=== Noncompliant code example

[source,csharp]
----
public void Sample(bool b)
{
    bool a = false;
    if (a) // Noncompliant
    {
        DoSomething(); // never executed
    }

    if (!a || b) // Noncompliant; "!a" is always "true", "b" is never evaluated
    {
        DoSomething();
    }
    else
    {
        DoSomethingElse(); // never executed
    }

    var d = "xxx";
    var res = d ?? "value"; // Noncompliant, d is always not null, "value" is never used
}
----

=== Compliant solution

[source,csharp]
----
public void Sample(bool b)
{
    bool a = false;
    if (Foo(a))
    {
        DoSomething();
    }

    if (b)
    {
        DoSomething();
    }
    else
    {
        DoSomethingElse();
    }

    var d = "xxx";
    var res = d;
}
----

=== 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.

include::../see.adoc[]

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 subsequent code is never executed.
* Change this expression which always evaluates to "not null"; some subsequent code is never executed.


include::../highlighting.adoc[]

'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]
