C# 将一个字符与一个int和一个字符串连接起来会产生奇怪的结果

C# 将一个字符与一个int和一个字符串连接起来会产生奇怪的结果,c#,.net,C#,.net,我正在编码,需要建立一个文件名。我想用一个u2;分隔文件名的各个部分 我想既然我只想在中添加char,我就可以使用' int id = 125; string testWithChar = id + '_' + "Something"; Console.WriteLine(testWithChar); 但当我这样做时,我得到了: 220左右 有点奇怪 但如果我做对了: int id = 125; string testWithString = id + "_" + "Something";

我正在编码,需要建立一个文件名。我想用一个u2;分隔文件名的各个部分

我想既然我只想在中添加char,我就可以使用
'

int id = 125;

string testWithChar = id + '_' + "Something";
Console.WriteLine(testWithChar);
但当我这样做时,我得到了:

220左右

有点奇怪

但如果我做对了:

int id = 125;

string testWithString = id + "_" + "Something";
Console.WriteLine(testWithString);
我得到了预期的输出:

什么的

但我很好奇。在第一个给我一个不同数字的例子中到底发生了什么?

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

int id = 125;

string testWithChar = id + '_' + "Something";
相当于:

string testWithChar = 125 + 95 + "Something";

相反,当您添加
“quot
时,在字符串和整数之间进行加法-运算符只是将字符串附加到它。

字符的int值是它在ASCII表中的位置<代码>''位于位置95

当您将一个整数添加到另一个数字类型时,最终得到的是加法的结果,而不是串联的结果。在本例中,char是一个数值,因此125+95(值为“u”)与字符串连接后,可以得到220_


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

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

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

检查一下125+90部分的数学是的,我刚发完帖子就发现了;)用于添加
string.Format()
。完全忘记了。因为
id+'.'
是首先计算的。您可以更改优先级,如
id+(''+“某物”)
@Marc没错。不管怎样,字符和整数之间的加法的默认运算符将它们相加,并且
.
也包含在ascii中。:)编辑