2017-10-29 134 views
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。

任何人都可以確認錯誤,或解釋此行爲?

回答

相關問題