
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
77 lines
1.7 KiB
Plaintext
77 lines
1.7 KiB
Plaintext
== 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>(T value)
|
|
{
|
|
if (value == null) // Noncompliant
|
|
{
|
|
// ...
|
|
}
|
|
// ...
|
|
}
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,csharp]
|
|
----
|
|
private bool IsDefault<T>(T value)
|
|
{
|
|
if(object.Equals(value, default(T)))
|
|
{
|
|
// ...
|
|
}
|
|
// ...
|
|
}
|
|
----
|
|
or
|
|
|
|
[source,csharp]
|
|
----
|
|
private bool IsDefault<T>(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[]
|