【问题标题】:In c# why (char)(1) + (char)(2) results in int 3在 c# 为什么 (char)(1) + (char)(2) 导致 int 3
【发布时间】:2013-08-22 12:42:46
【问题描述】:

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

VB.NET - 返回字符串

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

C# - 返回整数

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

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

【问题讨论】:

  • 你的意思是连接?
  • 如果我错了,请纠正我 - c# 和 java char 和 int arr 大小相同 & 0001 + 0010 = 0011(3)。
  • @Blam - 是的连接
  • "" + (char)1 + (char)2?不好,但应该工作。另外:string.Concat((char)1, (char)2).

标签: c# .net vb.net char


【解决方案1】:

最好的答案在 cmets 中,所以我想在这里将其提升为正确的答案。完全归功于@Jeow Li Huan:

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

【讨论】:

    【解决方案2】:

    (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)。

    【讨论】:

    • 为什么这是一种不好的做法?
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      在 C# 中char is a 16-bit numeric type,所以+ 表示加法,而不是串联。因此,当您添加ab 时,您会得到a+b。而且,这个加法的结果是int (see a quick demo)。

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

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

      【讨论】:

      • +1 遗憾的是,您跳过了最有趣的部分...为什么在 C# 中许多操作向上转换为 int :-)
      • 好吧,你还是要回答这个问题:P
      • 啊哈...现在我明白了。尝试了这里提到的所有答案,string.Format 似乎是最简洁的方法。 xanatos 和 Corak 的回答也不错,但将来可能会混淆团队。
      • 答案可以简写为string res = string.Concat(charA, charB);
      • @JeowLiHuan 你是对的,string.Concat() 总是比 stringBuilder 和 string.Format() 提供更好的性能。
      猜你喜欢
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      相关资源
      最近更新 更多