在可为空的可选参数中使用 C# 7.1 默认文本会导致意外行为



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 !!!
}

对我来说,这种行为是出乎意料的,看起来像编译器中的一个错误。

任何人都可以确认错误或解释这种行为吗?

在网上进行更多研究后,我发现这是一个已知的已确认错误

  • https://github.com/dotnet/csharplang/issues/970
  • https://github.com/dotnet/roslyn/issues/22578

它已修复,将成为 C# 7.2 的一部分。

相关内容

  • 没有找到相关文章

最新更新