Skip to main content

How to Resolve Error "CS0716: Cannot convert to static type 'type'" in C#

The Compiler Error CS0716 is a type conversion error. The message reads: "Cannot convert to static type 'StaticClass'".

In C#, a static class is conceptualized as a container for code (methods and fields) that does not operate on a specific instance. Because static classes cannot be instantiated (you cannot create a new object from them), it is impossible to have a variable that holds a "reference" to a static class. Consequently, attempting to cast an object to a static type (using (Type) or as Type) is logically impossible, as there is no object type to convert into.

This guide explains why static types cannot be cast targets and how to fix your code.

Understanding Static Types and Conversion

When you write a cast like (MyClass)myObject, you are telling the runtime: "Check if the object in memory is actually an instance of MyClass, and if so, give me a reference to it."

If MyClass is static:

  1. No instance of MyClass can ever exist on the heap.
  2. Therefore, myObject can never be an instance of MyClass.
  3. Therefore, the conversion is guaranteed to fail or be meaningless.

The compiler detects this impossibility and raises CS0716.

Scenario 1: Explicit Casting to a Static Type

This error often occurs when a developer refactors a standard class into a static class (e.g., a Utilities class) but forgets to remove casting logic elsewhere in the code.

Example of error:

public static class MathHelpers
{
public static int Add(int a, int b) => a + b;
}

public class Program
{
static void Main()
{
object obj = null;

// ⛔️ Error CS0716: Cannot convert to static type 'MathHelpers'
// You are trying to treat 'MathHelpers' as if it were an object type
// that a variable could hold.
MathHelpers helper = (MathHelpers)obj;
}
}

Scenario 2: Using the as Operator

The as operator attempts to cast an object and returns null if the cast fails. Since a static class cannot be stored in a variable, using as with a static type is invalid.

Example of error:

public static class AppConfig
{
public static string Name = "MyApp";
}

public class Program
{
static void CheckConfig(object input)
{
// ⛔️ Error CS0716: Cannot convert to static type 'AppConfig'
// 'as' implies that 'input' *could* be an instance of AppConfig.
var config = input as AppConfig;
}
}

Solution: Access Members Directly

If the class is static, you do not need (and cannot have) an instance of it to use its features. Instead of casting an object to the class type, simply access the static members directly via the class name.

Solution: remove the casting logic entirely.

public static class MathHelpers
{
public static int Add(int a, int b) => a + b;
}

public class Program
{
static void Main()
{
// ✅ Correct: No variable, no casting.
// Just call the method on the class itself.
int result = MathHelpers.Add(1, 2);

System.Console.WriteLine(result);
}
}
note

What if I need instances? If your application design requires you to pass objects around (e.g., passing a Configuration object to a constructor), then the class should not be static. Remove the static keyword from the class definition.

Conclusion

CS0716 is the compiler reminding you that static classes are not objects.

  1. Check the Class: Is it public static class?
  2. Remove Casts: Delete any code that looks like (StaticClass)variable or variable as StaticClass.
  3. Direct Access: Call the methods via ClassName.Method().