Why is this an issue?

Passing a collection as an argument to the collection’s own method is a code defect. Doing so might either have unexpected side effects or always have the same result.

Another case is using set-like operations. For example, using Union between a list and itself will always return the same list. Conversely, using Except between a list and itself will always return an empty list.

Exceptions to this rule are the methods AddRange and Concat, since the developer can use them to multiply the list elements or the list itself respectively.

var list = new List<int>();

list.Union(list);             // Noncompliant: always returns list
list.Intersect(list);         // Noncompliant: always returns list
list.Except(list);            // Noncompliant: always returns empty
list.SequenceEqual(list);     // Noncompliant: always returns true

var set = new HashSet<int>();
set.UnionWith(set);           // Noncompliant: no changes
set.IntersectWith(set);       // Noncompliant: no changes
set.ExceptWith(set);          // Noncompliant: always returns empty
set.SymmetricExceptWith(set); // Noncompliant: always returns empty
set.IsProperSubsetOf(set);    // Noncompliant: always returns false
set.IsProperSupersetOf(set);  // Noncompliant: always returns false
set.IsSubsetOf(set);          // Noncompliant: always returns true
set.IsSupersetOf(set);        // Noncompliant: always returns true
set.Overlaps(set);            // Noncompliant: always returns true
set.SetEquals(set);           // Noncompliant: always returns true

list.AddRange(list);          // Compliant
list.Concat(list);            // Compliant

Resources

Documentation