- Published on
C# - String.Empty & ""
之前在使用 StyleCop 時,其中有一條規則是 使用 String.Empty 代替 ""
,一直不是很了解 (沒有研究) 為什麼要使用 String.Empty
,而不要使用 ""
,後來無形中已經餋成習慣寫 Code 時就會直接寫 String.Empty
而不會寫 ""
,也一直沒有去探討。
前幾天公司裡面有個 C# Best Practice Test
,而且裡面也有這一題,剛好有這個機會來研究一下。
註:如果不知道 StyleCop 是什麼的,可以參考官網。是一個很棒的 Teamwork 的工具
歸類出三點
- 效能上面兩個的差距可以說是微乎其微 (後面文章會深入比較效能)
- 一般來說大多數的人認為
String.Empty
看來會比較直覺 (不過也有人認為""
比較直覺) ""
打的不好的話裡面有可能會出現空白字元 (個人是覺得機率有點低,不過也是有可能發生)
效能比較
原則上不管使用
String.Empty
或是""
都會分配記憶體,並沒有省下分配的記憶體C# 在 String 的使用上會被優化,只是因為實現的方式不一樣,所以優化的方式也會不太一樣
- String.Empty 在 C# 的內部的程式碼是
public static readonly String Empty
(可參考 String source code),因為是 static 的,所以是 C# 語法級別的優化。當程式碼被編譯為 IL 時,才會對程式碼進行優化,即所有對 String 類的靜態字段 Empty 的訪問都會被指向同一引用 ""
是由CLR
進行優化的。是通過String Pool
的方式來避免重新建立相同的字串
- String.Empty 在 C# 的內部的程式碼是
下圖為跑 10 億次的結果,原則上兩個是差不多的,有的時候會一樣,所以效能的差異上可以完全忽略
結論
看團隊的規範來使用,不過選擇使用 String.Empty
的比較多