2010-05-06 53 views
2

以下哪些將實現正確的結果:C#:如何構造串

(1)

int X = 23; 
string str = "HELLO" + X.ToString() + "WORLD"; 

(2)

int X = 23; 
string str = "HELLO" + X + "WORLD"; 

(3)

int X = 23; 
string str = "HELLO" + (string)X + "WORLD"; 

編輯:'正確'的結果是str評價到:HELLO23WORLD

+0

他們都做同樣的事情。 – 2010-05-06 06:22:47

+0

我不得不說,什麼是正確的結果? – LizB 2010-05-06 06:23:03

+0

那麼,除了在C#中沒有'toString()'這樣的事情,它就是'ToString()'。 – 2010-05-06 06:23:22

回答

4

選項3不能編譯,因爲你可以不投的intstring

其他兩個產生相同的結果。但是,有一個微妙的差異。

內部加號運算符編譯爲String.Concat的調用。 Concat有不同的重載。選項1調用Concat(string, string, string),而選項2調用Concat(object, object, object)有兩個字符串和一個盒裝的int。內部Concat然後在盒裝int上調用ToString

此外,檢查此相關的問題:Strings and ints, implicit and explicit

+0

爲什麼沒有選項2在int上調用ToString()並使用Concat(string,string,string)重載? – CJ7 2010-05-06 06:56:29

+1

我認爲這是因爲它讓調用者的代碼生成變得更簡單,通過讓Concat方法完成所有工作。 – 2010-05-06 07:04:06

7
int X = 23; 
string str = string.Format("HELLO{0}WORLD", X); 
+0

請在投票時發表評論。我的回答有問題嗎? – 2010-05-06 06:47:53

+0

-1:問題問三個代碼段中的哪一個產生了正確的結果,但是您的答案仍然有用,因爲它顯示了一種替代方法,但它不回答問題 – CJ7 2010-05-06 06:52:39

+0

+1:**多**優於並置字符串。回答者因爲沒有解釋爲什麼它是比問題中發佈的3更好的選擇而受到處罰是錯誤的。 – ANeves 2010-05-18 16:11:38

1

你可以使用StringBuilder太:

System.Text.StringBuilder str = new System.Text.StringBuilder(); 
str.Append("HELLO"); 
str.Append(X); 
str.Append("World");