在c#中,why(char)(1)+(char)(2)得到int 3
我试图将一些VB.NET代码转换为C#,并发现这个有趣的事情。 添加两个字符会在VB.NET和C#中返回不同的结果。
VB.NET – 返回字符串
Chr(1) & Chr(2) = " "
C# – 返回int
(char)(1) + char(2) = 3
如何在C#中添加(连接)两个字符?
在C#中, char
是一个16位数字类型 ,因此+
表示加法,而不是连接。 因此,当你添加a
和b
你得到a+b
。 此外,这个添加的结果是一个int
( 见快速演示 )。
如果通过“添加两个字符”表示“连接”,则在应用operator +
之前将它们转换为字符串将是一种选择。 另一种选择是使用string.Format
,如下所示:
string res = string.Format("{0}{1}", charA, charB);
通过添加到空字符串,您可以强制将char
转换为string
……所以
string res = "" + (char)65 + (char)66; // AB
(从技术上讲,它不是转换。编译器知道当你添加到string
它必须做一些魔术……如果你尝试将null
添加到字符串,它会认为null
是一个空字符串,如果你尝试添加一个string
它会做一个string.Concat
,如果你尝试添加其他任何东西,它会在非字符串成员上执行.ToString()
,然后是string.Concat
)
(char)(1)的ascii值为1,(char)(2)的ascii值为2
因此,1 + 2的ascii值(即(char)1 +(char)2)将等于3。
如果你这样做:“2”+“1”这将给你“21”(你不应该用它来加入字符串,不好的做法)
如果你这样做:’2’+’1’这将给你int值99,ascii值为2(50)+ ascii值为1(49)。
最好的答案是在评论中,所以我想在这里提出一个正确的答案。 完全归功于@Jeow Li Huan:
string res = string.Concat(charA, charB);