2016-08-09 118 views
3

我經常使用String.Empty作爲佔位符,相當於""。所以我的問題,爲什麼const不喜歡String.Empty?它們編譯相同。爲什麼創建一個常量字符串變量時不能使用String.Empty?

// Good 
private const string example = ""; 

// Bad 
private const string example = String.Empty; 

什麼String.Empty使得它無法與const使用。

+0

@格雷格因爲它不評估,以同樣的事情。 – Servy

+3

我懷疑這是因爲'Empty'本身不是一個常量,所以就編譯器而言它可以解析任何東西。而'const'需要在編譯時保證它的價值。文字'「」'提供了保證。 – David

+0

@Greg就編譯器而言,任何字符串值。在編譯時它不知道。 – Servy

回答

8

String.Empty不是一個常數,它只有readonly字段。並且由於它的字段(而不是在編譯時已知),因此它不能分配給常量。

http://referencesource.microsoft.com/#mscorlib/system/string.cs,c9f70a27facb27cf

... 
//We need to call the String constructor so that the compiler doesn't mark this as a literal. 
//Marking this as a literal would mean that it doesn't show up as a field which we can access 
//from native. 
public static readonly String Empty; 
+0

這很有道理,我沒有意識到它是隻讀的。 – Greg

相關問題