在可为空的可选参数中使用 C# 7.1 默认文字会导致意外行为
Using C# 7.1 default literal in nullable optional argument causes unexpected behavior
C# 7.1 引入了一个名为 "Default Literals" 的新功能,它允许使用新的 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 !!!
}
对我来说,这种行为是出乎意料的,看起来像是编译器中的错误。
任何人都可以确认错误或解释此行为吗?
在网上进行更多研究后,我发现这是一个已知的已确认错误:
C# 7.1 引入了一个名为 "Default Literals" 的新功能,它允许使用新的 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 !!!
}
对我来说,这种行为是出乎意料的,看起来像是编译器中的错误。
任何人都可以确认错误或解释此行为吗?
在网上进行更多研究后,我发现这是一个已知的已确认错误: