== Why is this an issue? When constraints have not been applied to restrict a generic type parameter to be a reference type, then a value type, such as a ``++struct++``, could also be passed. In such cases, comparing the type parameter to ``++null++`` would always be false, because a ``++struct++`` can be empty, but never ``++null++``. If a value type is truly what's expected, then the comparison should use ``++default()++``. If it's not, then constraints should be added so that no value type can be passed. === Noncompliant code example [source,csharp] ---- private bool IsDefault(T value) { if (value == null) // Noncompliant { // ... } // ... } ---- === Compliant solution [source,csharp] ---- private bool IsDefault(T value) { if(object.Equals(value, default(T))) { // ... } // ... } ---- or [source,csharp] ---- private bool IsDefault(T value) where T : class { if (value == null) { // ... } // ... } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Use a comparison to "default(xxx)" instead or add a constraint to "xxx" so that it can't be a value type. ''' == Comments And Links (visible only on this page) === on 22 May 2015, 10:04:25 Tamas Vajk wrote: Fixed some minor wording issues, and the sample === on 22 May 2015, 12:07:32 Ann Campbell wrote: Thanks [~tamas.vajk]. Looks good. === on 29 May 2015, 12:50:40 Tamas Vajk wrote: \[~ann.campbell.2] Could you run through the description? I've change the wording "false negative" because it sounded strange. === on 29 May 2015, 14:50:44 Ann Campbell wrote: looks good [~tamas.vajk] endif::env-github,rspecator-view[]