Оператор Nullable (?
) используется для присвоения null
объектам со значениями. Обычно вы не можете присвоить null
типу данных valuetyped
, например int
, long
, DateTime
et c.
MyClass<T> where T:class
Но в вашем случае вы явно говорите, что ваш тип c generi (T
) может быть только class
. Классы всегда являются ссылочными типами, и им можно присваивать нулевое значение. По этой причине он показывает ошибку, и вам не нужно помечать его как nullable
Это скомпилируется, так как T
всегда является struct
, а структуры имеют значение
public class MyClass<T> where T : struct
{
public T? field1 { get; set; }
}
Это не скомпилируется, так как компилятор не знает, может ли T
быть class
тоже
public class MyClass<T>
{
public T? field1 { get; set; }
}