Не получается присвоить null в Nullable C#
Такой код не компилируется:
public static void f<T>()
{
T? a = null;
}
Ошибка
Cannot convert 'null' to type parameter 'T' because it could be a value type. Consider using 'default(T)' instead
Почему так происходит?
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Вообще я работаю с классами
public static void f<T>() where T : class
{
T a = null;
}
Либо
public static void f<T>()
{
T? a = default;
}
Для ссылочных типов default это всегда null.
Кстати, для ссылочных типов T? это просто аннотация, по факту string и string? в рантайме одно и то же. Для значимых напротив int? это Nullable<int>, поэтому у компилятора крыша едет, если вы объявляете T? не применяя к нему никаких ограничений. Хотя, казалось бы, с точки зрения семантики языка должно быть всё логично.
Подробнее о всех нюансах можно почитать в документации: Nullable reference types.