2015-08-14 107 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); 
相关问题