Использование литерала 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.

Другие вопросы по тегам