8
C#7.1引入了一個名爲「Default Literals」的新功能,該功能允許使用新的default
表達式。在可空可選參數中使用C#7.1默認字面值導致意外行爲
// 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中的錯誤LER。
任何人都可以確認錯誤,或解釋此行爲?