== 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[]