Использование литерала C# 7.1 по умолчанию в необязательном аргументе NULL приводит к неожиданному поведению
C# 7.1 представляет новую функцию под названием "Литералы по умолчанию", которая позволяет новым default
выражения.
// instead of writing
Foo x = default(Foo);
// we can just write
Foo x = default;
За Nullable<T>
типы, значение по умолчанию null
и при обычном использовании это работает как ожидалось:
int? x = default(int?); // x is null
int? x = default; // x is null
Однако, когда я пытаюсь использовать новый литерал по умолчанию в качестве необязательного аргумента (параметра) функции, он не работает должным образом:
static void Foo(int? x = default(int?))
{
// x is null
}
static void Foo(int? x = default)
{
// x is 0 !!!
}
Для меня это поведение неожиданно и выглядит как ошибка в компиляторе.
Кто-нибудь может подтвердить ошибку или объяснить это поведение?
1 ответ
Решение
После дополнительных исследований в Интернете я обнаружил, что это известная подтвержденная ошибка:
Это уже исправлено и будет частью C# 7.2.