2011-06-03 50 views
2

在將數值轉換爲string時省略.ToString()有沒有什麼缺點?對數值變量使用'.ToString()'

int i = 1234; 
string s; 
// Instead of 
s = "i is " + i.ToString(); 
// Writing 
s = "i is " + i; 
+0

就產生的IL而言,沒有區別。 – 2011-06-03 22:40:03

+7

除了這個不會編譯的事實嗎? '不能將類型'int'隱式轉換爲'string'' – 2011-06-03 22:40:44

+0

難道你不能將類型'int'隱式轉換爲'string''錯誤嗎? – ataddeini 2011-06-03 22:41:34

回答

4

這種情況並沒有什麼不同。

"Count: " + i 

編譯成

String.Concat("Count: ",i) 

String.Concat具有多個過載,並相信Concat(Object, Object)過載被選擇(因爲字符串的唯一共同的祖先和int是對象)。

內部實現是這樣的:

return (arg0.ToString() + arg1.ToString()); 

如果你打電話

"Count: " + i.ToString() 

那麼它選擇Concat(String, String)超載,因爲兩者都是字符串。

因此,對於所有的實際問題,無論如何它本質上都是這樣做的 - 它隱式調用i.ToString()。

在上述情況下,我通常省略.ToString,因爲它只是增加了噪音。

0

當Option Strict處於打開狀態(默認爲C#)時,將無法編譯作業s = i

1

儘管它不會編譯(至少它不會使用Visual Studio 2008,但不會在第一個i之前添加另一個""),但有區別,這取決於您的使用方式(假設它會起作用)以及順序運營商的處理(在C#中,我想幾乎所有的語言+=更高的優先級):

int i = 1234; 
string s; 
s = i.ToString(); // "1234" 
s = i.ToString() + i.ToString(); // "12341234" 
s = i; // "1234" 
s = i + i; // "2468" (but only if you don't add "" in front) 

編輯: 有了更新的代碼有沒有真正的區別假設你不使用括號將幾個非字符串對象/變量分組:

int i = 1234; 
string s; 
s = "" + i + i; // "12341234" 
s = "" + (i + i); // "2468" 
1

我能想到的唯一缺點是您可以將其他參數設置爲ToString()

但是,在那裏你可以串聯字符串一個int大多數情況下,我認爲更好的解決方案是使用string.Format()

string.Format("i is {0}", i); 

對你來說,它不是那麼明顯,這種方式是更好的,但你開始考慮添加適當的標點符號(i is {0}.),以某種其他方式稍微改變輸出或支持本地化,這種方式的優點變得清晰。