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

Sar*_*arG 8 .net c# vb.net char

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

VB.NET - 返回字符串

Chr(1) & Chr(2) = "  "
Run Code Online (Sandbox Code Playgroud)

C# - 返回int

(char)(1) + char(2) = 3
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 15

在C#中char是一个16位数字类型,因此+意味着添加,而不是连接.因此,当你添加ab获得a+b.此外,这个添加的结果是int(见快速演示).

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

string res = string.Format("{0}{1}", charA, charB);
Run Code Online (Sandbox Code Playgroud)

  • 答案可以简化为`string res = string.Concat(charA,charB);` (3认同)

xan*_*tos 5

通过添加到空字符串,您可以强制"转换" charstring......所以

string res = "" + (char)65 + (char)66; // AB
Run Code Online (Sandbox Code Playgroud)

(从技术上讲,它不是转换.编译器知道当你添加string它时必须做一些魔术......如果你尝试添加null一个字符串,它会认为null是一个空字符串,如果你尝试添加string它做一个string.Concat,如果你尝试添加其他任何东西它.ToString()在非字符串成员上做了然后string.Concat)