В C# можно ли использовать значение null в качестве значения или операнда? - PullRequest
0 голосов
/ 16 марта 2020

Следующий C# код:

int? a = null;
Console.WriteLine(a ?? 3);

может распечатать 3. Но если его изменить на:

Console.WriteLine(null ?? 3);

, то он не сможет работать, выдав

error CS0019: Operator '??' cannot be applied to operands of type '<null>' and 'int' 

Можно ли использовать null в качестве значения или операнда в C#?

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Это зависит от того, задан ли тип контекстом. Например, вы можете сделать:

(int?)null ?? 3

или

null ?? (int?)3

Если вы хотите использовать бокс вместо переноса на Nullable<>, то есть:

(object)null ?? 3

или

null ?? (object)3

или вы можете использовать другой базовый класс или интерфейс, который реализует int, например:

(IFormattable)null ?? 3

или

null ?? (IFormattable)3

Голый null сам по себе не имеет типа, но он неявно преобразуется в группу типов, которые допускают нулевое значение.

Для ссылочного типа тип может быть выведен из контекста:

null ?? "three"  /* OK */
1 голос
/ 16 марта 2020

Это будет работать

Console.WriteLine((int?)null ?? 3);

Поскольку null не имеет типа, вам необходимо привести его к ссылочному типу или обнуляемому типу

...