All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sonar.plugins.csharp.S1944.html Maven / Gradle / Ivy

There is a newer version: 10.2.0.105762
Show newest version

Why is this an issue?

A cast is an explicit conversion, which is a way to tell the compiler the intent to convert from one type to another.

void Method(object value)
{
    int i;
    i = (int)value;   // Casting (explicit conversion) from float to int
}

In most cases, the compiler will be able to catch invalid casts between incompatible value types or reference types.

However, the compiler will not be able to detect invalid casts to interfaces.

What is the potential impact?

Invalid casts will lead to unexpected behaviors or runtime errors such as InvalidCastException.

Exceptions

No issue is reported if the interface has no implementing class in the assembly.

How to fix it

To prevent an InvalidCastException from raising during an explicit conversion, it is recommended to use the as operator. When the conversion is not possible, the as operator returns null and will never raise an exception.

Code examples

Noncompliant code example

public interface IMyInterface
{ /* ... */ }

public class Implementer : IMyInterface
{ /* ... */ }

public class AnotherClass
{ /* ... */ }

public static class Program
{
  public static void Main()
  {
    var another = new AnotherClass();
    var x = (IMyInterface)another;     // Noncompliant: InvalidCastException is being thrown
  }
}

Compliant solution

public interface IMyInterface
{ /* ... */ }

public class Implementer : IMyInterface
{ /* ... */ }

public class AnotherClass
{ /* ... */ }

public static class Program
{
  public static void Main()
  {
    var another = new AnotherClass();
    var x = another as IMyInterface;    // Compliant: but will always be null
  }
}

Resources

Documentation





© 2015 - 2024 Weber Informatics LLC | Privacy Policy