2015-08-14 110 views
2

我正在編碼並需要建立一個文件名。我想用_分隔文件名的各個部分。用一個int和一個字符串連接一個字符並不奇怪

我覺得,因爲我只想添加字符我可以使用'_'

int id = 125; 

string testWithChar = id + '_' + "Something"; 
Console.WriteLine(testWithChar); 

但是當我做我得到這個:

220Something

奇種類。

但如果我這樣做是正確的:

int id = 125; 

string testWithString = id + "_" + "Something"; 
Console.WriteLine(testWithString); 

我得到預期的輸出:

125_Something

但我很好奇。第一個給我一個不同的號碼真的發生了什麼?

+1

因爲'ID +「_」'第一次評估。你可以改變像'id +('_'+「Something」)那樣的優先級'' –

回答

3

原因是,C#認爲char是unicode的值,因此它們之間的加法不會添加字符串,而是整數。 _ ASCII碼是95,因此

int id = 125; 

string testWithChar = id + '_' + "Something"; 

是的equivallent:

string testWithChar = 125 + 95 + "Something"; 

相反,當你添加"_",在添加一個字符串和一個整數之間進行 - 和運營商只是將字符串附加到它。

+0

'char'是在C#中的unicode# – Marc

+0

@Marc沒錯。無論如何,字符和整數之間的默認添加操作符將它們​​加在一起,'_'也包含在ascii中。 :) editted –

1

char的int值是它在ASCII表中的位置。 '_'是在地方95

1

當您將一個整數添加到另一個數值類型時,最終會得到加法的結果,而不是拼接。在這種情況下,char是一個數字值,因此與字符串連接的125 + 95('_'的值)會給你220_Something。

相反,我會創建字符串爲string.Format(「{0} _ {1}」,id,「Something」),特別是當您的最終字符串變得更加複雜。

+0

看看你的數學在125 + 90部分。 ;) –

+0

是的,剛剛發佈後發現;) – sporkasaurus

+0

用於添加'string.Format()'。完全忘記它。 –

0

的int值被替換的95 其ASCII值使用字符串格式化是最安全的方法:

Console.WriteLine("{0}_Something", id); 
相關問題