Ошибка компилятора CS0315
Обновлен: Ноябрь 2007
Сообщение об ошибке
Тип "тип_значения" не может быть использован как параметр-тип "Т" в универсальном типе или методе "тип_или_метод_<T>". Нет преобразования-упаковки или преобразования параметра-типа из "тип_значения" в "тип_ссылки".
The type 'valueType' cannot be used as type parameter 'T' in the generic type or method 'TypeorMethod<T>'. There is no boxing conversion from 'valueType' to 'referenceType'.
Эта ошибка возникает, если универсальный тип ограничивается определенным классом, а затем предпринимается попытка создать экземпляр этого класса с использованием типа значения, который не может быть неявно приведен к данному универсальному типу с помощью преобразования-упаковки.
Исправление ошибки
- Одним из решений может стать переопределение структуры или класса.
Пример
Следующий пример приводит к возникновению ошибки CS0315:
// cs0315.cs
public class ClassConstraint { }
public struct ViolateClassConstraint { }
public class Gen<T> where T : ClassConstraint
{
}
public class Test
{
public static int Main()
{
Gen<ViolateClassConstraint> g = new Gen<ViolateClassConstraint>(); //CS0315
return 1;
}
}
См. также
Ссылки
Ограничения параметров типа (руководство по программированию в C#)
Упаковка-преобразование и распаковка-преобразование (Руководство по программированию на C#)