Не получается присвоить 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.

→ Ссылка