奇怪的场景 Convert.ToChar(integer) 或 (char)integer

时间:2021-05-24 17:48:52

标签: c#

我有以下条件。

Console.WriteLine(Convert.ToChar(65)); // Gives 'A'

Console.WriteLine(Convert.ToChar(65) + 1); // Gives 66; Expectation was 'A1'

Console.WriteLine(Convert.ToChar(65) + "1"); // Gives 'A1'

这是为什么?我想要第三种情况。

5 个答案:

答案 0 :(得分:8)

您得到 66 而不是 A1 的原因是因为您将一个字符添加到一个整数。如果你向 char 添加一个字符串,那么它才会返回一个字符串。

<块引用>

documentation on char char 关键字用于声明 System.Char 结构的实例,.NET Framework 使用该实例来表示 Unicode 字符。 Char 对象的值是一个 16 位的数字(序数)值

答案 1 :(得分:5)

你的期望是错误的。 char 类型是数字类型,可以容纳整数。所以当你这样做

Convert.ToChar(65)

你仍然有一个值为 65 的数字。所以当你这样做时

Convert.ToChar(65) +1

您隐式地将 char 转换回 int 并添加 +1,因此您得到 66

char 区别于其他数字类型的特殊之处在于,当您将其转换为字符串时,它会显示为我们从字母表中知道的“字符”。因此,当你这样做

Convert.ToChar(65) + "1"

值为 65 的字符被隐式转换为字符串 ("A"),然后与字符串 "1" 连接。因此结果是 "A1"

答案 2 :(得分:3)

来自documentation

<块引用>

在整数类型的情况下,这些运算符(++-- 运算符除外)是为 intuintlong、和 ulong 类型。当操作数是其他整数类型(sbytebyteshortushortchar)时,它们的值将转换为 {{1} } type,也是一个操作的结果类型。

所以在你的第二种情况下,int 给出 Convert.ToChar(65),但 'A' 强制 'A' + 1'A' 类型,它给出 int,这是65 + 1

由于 66 不是整数类型,因此该类的 string 运算符被定义为将字符附加到字符串,并且您得到字符串 +

答案 3 :(得分:3)

第一个案例:

Console.WriteLine(Convert.ToChar(65));

上面的例子给你的结果是 A,因为它使用了 Console.WriteLine(char) 函数。


第二种情况

根据MSDN documentation

<块引用>

char 可以隐式转换为 ushort、int、uint、long、ulong、 浮点数、双精度数或十进制数。

<块引用>

注意: string 类型在上述隐式转换列表中没有提到。

在您的第二个示例中,编译器将 Convert.ToChar(65) ie 'A' 转换为整数 隐式 并将其加 1 并给出结果为 66 而不是 { {1}}


第三种情况

在您的第三个示例中,您使用 + operator 将字符 A1 与字符串 'A' 连接起来,将 "1" 作为字符串打印到控制台。

答案 4 :(得分:-2)

您变成 66 来代替 A1 的原因是因为您将一个字符添加到一个整数。如果您将字符串上传到 char here,那么它只会返回给您一个字符串。

相关问题