== Why is this an issue?

When the call to a function doesn't have any side effects, what is the point of making the call if the results are ignored? In such case, either the function call is useless and should be dropped or the source code doesn't behave as expected.


This rule raises an issue when the results of the following methods are ignored:

* LINQ method,
* ``++[Pure]++`` method,
* any method on ``++string++``, ``++int++``, ..., ``++System.Collections.Immutable.ImmutableArray<T>++``, ``++ImmutableHashSet<T>++``, ...

Notes:

* although ``++string.Intern++`` has a side effect, ignoring its return value is still suspicious as it is the only reference ensured to point to the intern pool.
* Link methods can have side effects if they are misused. Example:

----
tests.All(c => { c.myfield = "foo"; return true; });
----
Such code should be rewritten as a normal loop.

=== Noncompliant code example

[source,csharp]
----
coll.Where(i => i > 5).Select(i => i*i); // Noncompliant
"this string".Equals("other string"); // Noncompliant
----

=== Compliant solution

[source,csharp]
----
var res = coll.Where(i => i > 5).Select(i => i*i);
var isEqual = "this string".Equals("other string");
----

=== Exceptions

This rule doesn't report issues on method calls with ``++out++`` or ``++ref++`` arguments.


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::message.adoc[]

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

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