在c#中,why(char)(1)+(char)(2)得到int 3

时间:2013-08-20 12:48:02

标签: c# .net vb.net char

我试图将一些VB.NET代码转换为C#并发现这个有趣的事情。 添加两个字符会在VB.NET和C#中返回不同的结果。

VB.NET - 返回字符串

Chr(1) & Chr(2) = "  "

C# - 返回int

(char)(1) + char(2) = 3

如何在C#中添加(连接)两个字符?

4 个答案:

答案 0 :(得分:15)

在C#char is a 16-bit numeric type中,+表示添加,而不是连接。因此,当您添加ab时,您会获得a+b。此外,此添加的结果是intsee a quick demo)。

如果通过“添加两个字符”表示“连接”,则在应用运算符+之前将它们转换为字符串将是一种选择。另一种选择是使用string.Format,如下所示:

string res = string.Format("{0}{1}", charA, charB);

答案 1 :(得分:5)

通过添加空字符串,您可以强制将char“转换”为string ...所以

string res = "" + (char)65 + (char)66; // AB

(从技术上讲,它不是转换。编译器知道当你添加到string时,它必须做一些魔术...如果你尝试将null添加到一个字符串,它会考虑将null设置为空字符串,如果您尝试添加string它会执行string.Concat,如果您尝试添加其他内容,则会对非字符串执行.ToString()成员然后string.Concat

答案 2 :(得分:1)

最好的答案在评论中,所以我想在这里提到一个正确的答案。完全归功于@Jeow Li Huan:

string res = string.Concat(charA, charB);

答案 3 :(得分:0)

(char)(1)的ascii值为1和 (char)(2)ascii值为2

因此ascii值为1 + 2(即(char)1 +(char)2)将等于3.

如果你这样做: “2”+“1”这将给你“21”(你不应该用它来加入字符串,不好的做法)

如果你这样做: '2'+'1'这将使你的int值为99,即ascii值为2(即50)+ ascii值为1(即49)。