Ошибка компилятора CS0413
Обновлен: Ноябрь 2007
Сообщение об ошибке
Параметр-тип "параметр-тип" не может использоваться с оператором "as", поскольку он не имеет ни ограничений типа класса, ни ограничения "class"
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
Эта ошибка возникает, если универсальный тип используется оператор 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);
}
}