将char与int和string连接起来很奇怪

时间:2015-08-14 21:37:44

标签: c# .net

我正在编码,需要建立一个文件名。我想用_。

分隔文件名的各个部分

我认为,因为我只想添加char,所以我可以使用'_'

int id = 125;

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

但是,当我这样做时,我得到了这个:

  

220Something

有点奇怪。

但如果我做得对:

int id = 125;

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

我得到了预期的输出:

  

125_Something

但我很好奇。第一个给我一个不同数字的实际情况是什么?

4 个答案:

答案 0 :(得分:3)

原因是,C#将char视为unicode值,因此它们之间的相加不会添加字符串,而是整数。 ascii中的_为95,因此

int id = 125;

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

是等效的:

string testWithChar = 125 + 95 + "Something";

相反,当你添加"_"时,添加是在字符串和整数之间完成的 - 操作符只是将字符串附加到它。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

将整数添加到另一个数字类型时,最终会得到添加的结果,而不是连接。在这种情况下,char是一个数值,所以125 + 95(值为'_')与你的字符串连接,给你220_Something。

我会将字符串创建为string.Format(“{0} _ {1}”,id,“Something”),尤其是当您的最终字符串变得更复杂时。

答案 3 :(得分:0)

将int值替换为其ASCII值95。 使用字符串格式是最安全的方式:

Console.WriteLine("{0}_Something", id);