== Why is this an issue? Inappropriate casts are issues that will lead to unexpected behavior or runtime errors, such as `InvalidCastException`s. The compiler will catch bad casts from one class to another, but not bad casts to interfaces. It is much better to use the `as` operator because it will return `null` instead of throwing an exception. === Noncompliant code example [source,csharp] ---- public interface IMyInterface { /* ... */ } public class Implementer : IMyInterface { /* ... */ } public class MyClass { /* ... */ } public static class Program { public static void Main() { var myclass = new MyClass(); var x = (IMyInterface) myclass; // Noncompliant, InvalidCastException is being thrown var b = myclass is IMyInterface; // Noncompliant, always false } } ---- === Compliant solution [source,csharp] ---- public interface IMyInterface { /* ... */ } public class Implementer : IMyInterface { /* ... */ } public class MyClass { /* ... */ } public static class Program { public static void Main() { var myclass = new MyClass(); var x = myclass as IMyInterface; // Compliant, but will always be null var b = false; } } ---- === Exceptions No issue is reported if the interface has no implementing class in the assembly. include::../see.adoc[] ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message * Review this cast; in this project there's no type that implements both "{0}" and "{1}". * Review this cast; in this project there's no type that extends "{0}" and implements "{1}". * Nullable is known to be empty, this cast throws an exception. ''' == Comments And Links (visible only on this page) === on 11 Dec 2015, 08:58:50 Tamas Vajk wrote: \[~ann.campbell.2] applied some changes to the description === on 11 Dec 2015, 13:57:58 Ann Campbell wrote: looks good === on 21 Jul 2016, 14:39:03 Ann Campbell wrote: \[~tamas.vajk] I've tweaked the wording of your addition. Please double-check me. === on 21 Jul 2016, 15:24:29 Tamas Vajk wrote: \[~ann.campbell.2] "known-empty" is strange for me, I would probably go with simply "empty" if the original variant was not good. === on 21 Jul 2016, 15:38:42 Ann Campbell wrote: Second attempt made [~tamas.vajk] === on 21 Jul 2016, 15:41:08 Tamas Vajk wrote: \[~ann.campbell.2] perfect, thanks. include::../comments-and-links.adoc[] endif::env-github,rspecator-view[]