Обнуляемое поле шаблона - PullRequest
1 голос
/ 29 апреля 2020

Я нашел такой код в приложении C#:

public class MyClass<T> where T:class
{
    public T? field1 { get; set; }
}

Я не понимаю, почему, но у меня есть эта ошибка в моей среде разработки:

[CS8627] Параметр типа Nullable должен быть известен как тип значения или ссылочный тип NULL. Попробуйте добавить ограничение 'class', 'struct' или type.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Оператор 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; }
}
0 голосов
/ 29 апреля 2020

Ваш код будет работать нормально, только если вы удалите точку опроса из T? Имущество. По умолчанию класс обнуляется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...