2010-08-01 5 views
2

Я пытаюсь реализовать класс, который хранит общий обнуляемого типа:Nullable типа в качестве общего параметра

public class myclass<T?> 
{ 
    T? myvariable; 

    public T? myfunction(){ 
     return myvariable; 
    } 
} 

И в то время как выше класс компилируется нормально, фактическое использование, которое обеспечивает проблемы:

myclass<int?> c = new myclass<int>(); 
int? = c.myfunction(); // does not work: implicit cast from type T? in int? not possible. 
// or, assuming the variable is not null 
int = c.myfunction().Value; // implicit cast from type T in int not possible. 

Что я делаю неправильно или как я могу обойти это?

+0

Ваш класс не компилируется. – dtb

+0

И ваш пример не имеет смысла. Чего вы пытаетесь достичь? – dtb

+0

Действительно, он не компилируется ... извините, другая ошибка должна была покрыть его в синтаксическом контролере. То, что я привязываю к достижению, является классом, в котором хранится тип с нулевым значением. (Недостаток из приведенного выше примера - это та часть, где установлена ​​переменная) – Peter

ответ

5

Ни один из примеров компиляции:

  • <T?> не является допустимым синтаксисом; она должна быть <T>
  • myclass needs a where T : struct constraint
  • Первая строка вашего второго примера следует читать: myclass<int> c = new myclass<int>();.

Остальная часть вашего второго примера должна скомпилировать ОК.

+0

это решение. большое спасибо – Peter

Смежные вопросы