Compiler Error CS0413

由于类型参数“type parameter”既没有类类型约束,也没有“class”约束,因此不能与“as”运算符一起使用

如果某个泛型类型使用了 as 运算符,但该泛型类型不具有类类型约束,则发生此错误。 as 运算符只允许用于引用类型,因此必须约束类型参数以保证它不是值类型。要避免此错误,请使用类类型约束或引用类型约束。

这是因为 as 运算符能够返回 null(它不可能是值类型的值),并且类型参数必须被视为值类型,除非它是类类型约束或引用类型约束。

下面的示例生成 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);
   }
}