2015-04-07 36 views
0

之間的區別我有以下的一小段代碼,讓我有點困惑,因爲我不是很熟悉C#。String.Empty和「」在可選參數

我需要使用一個可選的參數,如下圖所示:

private string GetSomething(object inputObject, string optionalString = "") 
{ 
    //... 
} 

所有的膨脹和幸福。但是,如果我編輯了上面這段跟隨項目的其餘部分的編碼標準,如下圖所示,我得到了一個錯誤:

private string GetSomething(object inputObject, string optionalString = String.Empty) 
{ 
    //... 
} 

與錯誤讀取

Default parameter value for 'optionalString' must be a compile-time constant.

雖然我理解爲什麼它需要成爲一個常量,爲什麼後面的版本不是像第一個版本那樣簡單地進行優化和編譯?在某些情況下是否有區別?
如果重要,我使用的是Visual Studio 2013,該項目是.NET 4.5。

回答

6

對於complicated reasons,String.Empty不是編譯時常量;相反,它是一個只讀字段。

JITter會優化所有對它的引用,但C#語言不會將其視爲常量。