我试图将一些 VB.NET 代码转换为 C# 并发现了这个有趣的东西。添加两个字符会在 VB.NET 和 C# 中返回不同的结果。
VB.NET -返回字符串
Chr(1) & Chr(2) = " "
C# -返回整数
(char)(1) + char(2) = 3
如何在 C# 中添加(连接)两个字符?
在 C#char
中是 16 位数字类型,因此+
表示加法,而不是串联。因此,当您添加a
并b
获得a+b
. 此外,此添加的结果是int
(请参阅快速演示)。
如果“添加两个字符”的意思是“连接”,那么在应用运算符之前将它们转换为字符串+
将是一种选择。另一种选择是使用string.Format
,如下所示:
string res = string.Format("{0}{1}", charA, charB);
通过添加到一个空字符串,您可以强制“转换”char
为string
... 所以
string res = "" + (char)65 + (char)66; // AB
(从技术上讲,这不是转换。编译器知道,当您添加到 a 时,string
它必须做一些魔术......如果您尝试添加null
到字符串,它认为 thenull
是一个空字符串,如果您尝试添加string
它执行 astring.Concat
并且如果您尝试添加任何其他内容,它会.ToString()
在非字符串成员上执行 a 然后string.Concat
)
最好的答案在评论中,所以我想在这里将其提升为正确的答案。完全归功于@Jeow Li Huan:
string res = string.Concat(charA, charB);
(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)。