Прочитать на английском

Поделиться через


Ошибка компилятора CS0413

Параметр типа "параметр типа" не может использоваться с оператором "as", так как он не имеет ни ограничений типа класса, ни ограничения "class"

Эта ошибка возникает в том случае, если универсальный тип использует оператор as, но при этом не имеет ограничений типа класса. Оператор as можно использовать только со ссылочными типами и типами значений, допускающими значение NULL, поэтому необходимо определить ограничение для параметра типа, гарантирующее, что он не будет иметь тип значения. Чтобы избежать этой ошибки, используйте ограничение типа класса или ограничение ссылочного типа.

Это связано с тем, что оператор 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);  
   }  
}