2023-05-03 11:06:20 +02:00
== Why is this an issue?
2021-04-28 16:49:39 +02:00
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.
2021-04-28 18:08:03 +02:00
2023-05-03 11:06:20 +02:00
=== Noncompliant code example
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,csharp]
2021-04-28 16:49:39 +02:00
----
if (x is Fruit) // Noncompliant
{
var f = (Fruit)x; // or x as Fruit
// ...
}
----
2021-04-28 18:08:03 +02:00
2023-05-03 11:06:20 +02:00
=== Compliant solution
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,csharp]
2021-04-28 16:49:39 +02:00
----
2021-07-16 14:41:01 +02:00
// C# 6
2021-04-28 16:49:39 +02:00
var f = x as Fruit;
if (f != null)
{
2021-07-16 14:41:01 +02:00
// ...
}
// C# 7
if (x is Fruit fruit)
{
// ...
2021-04-28 16:49:39 +02:00
}
----
2021-04-28 18:08:03 +02:00
2021-06-02 20:44:38 +02:00
2021-06-03 09:05:38 +02:00
ifdef::env-github,rspecator-view[]
2021-09-20 15:38:42 +02:00
'''
== Implementation Specification
(visible only on this page)
2023-05-25 14:18:12 +02:00
=== 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
2021-09-20 15:38:42 +02:00
2021-06-08 15:52:13 +02:00
'''
2021-06-02 20:44:38 +02:00
== Comments And Links
(visible only on this page)
2023-05-25 14:18:12 +02:00
=== 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. :-)
2021-06-03 09:05:38 +02:00
endif::env-github,rspecator-view[]