rspec/rules/S3247/csharp/rule.adoc
Fred Tingaud 16f6c0aecf
Inline adoc when include has no additional value (#1940)
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.
2023-05-25 14:18:12 +02:00

74 lines
1.6 KiB
Plaintext

== Why is this an issue?
Because the ``++is++`` operator performs a cast if the object is not null, using ``++is++`` to check type and then casting the same argument to that type, necessarily performs two casts. The same result can be achieved more efficiently with a single cast using ``++as++``, followed by a null-check.
=== Noncompliant code example
[source,csharp]
----
if (x is Fruit) // Noncompliant
{
var f = (Fruit)x; // or x as Fruit
// ...
}
----
=== Compliant solution
[source,csharp]
----
// C# 6
var f = x as Fruit;
if (f != null)
{
// ...
}
// C# 7
if (x is Fruit fruit)
{
// ...
}
----
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Primary: Replace this type-check-and-cast sequence with an "as" and a null check.
Secondary: Replace this cast
=== Highlighting
* Primary: on the "is" check
* Secondary: on the following casts
'''
== Comments And Links
(visible only on this page)
=== is related to: S1905
=== on 8 Jul 2015, 15:28:40 Ann Campbell wrote:
\[~tamas.vajk] note that I'm a little concerned the title might be too broad. What do you think?
=== on 9 Jul 2015, 12:18:38 Tamas Vajk wrote:
\[~ann.campbell.2] I think the title is okay. Maybe we could add "useless duplicate casts..."
I found this: \https://msdn.microsoft.com/en-us/library/ms182271.aspx, which also uses the phrase "duplicate casts", so there is no need to modify it.
=== on 9 Jul 2015, 12:35:34 Ann Campbell wrote:
\[~tamas.vajk] I vote against adding "useless" to the title since that, in itself, would be redundant. :-)
endif::env-github,rspecator-view[]