# Compiler Error CS0413

The type parameter 'type parameter' cannot be used with the 'as' operator because it does not have a class type constraint nor a 'class' constraint

This error occurs if a generic type uses the as operator, but that generic type does not have a class type constraint. The as operator is only allowed with reference and nullable value types, so the type parameter must be constrained to guarantee that it is not a value type. To avoid this error, use a class type constraint or a reference type constraint.

This is because the as operator could return null, which is not a possible value for a value type, and the type parameter must be treated as a value type unless it is a class type constraint or a reference type constraint.

## Example

The following sample generates CS0413.

// CS0413.cs
// compile with: /target:library
class A {}
class B : A {}

class CMain
{
A a = null;
public void G<T>()
{
a = new A();
System.Console.WriteLine (a as T);  // CS0413
}

// OK
public void H<T>() where T : A
{
a = new A();
System.Console.WriteLine (a as T);
}
}