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


Ошибка компилятора 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#)