我有以下条件。
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'
这是为什么?我想要第三种情况。
答案 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)
在整数类型的情况下,这些运算符(++
和 --
运算符除外)是为 int
、uint
、long
、和 ulong
类型。当操作数是其他整数类型(sbyte
、byte
、short
、ushort
或 char
)时,它们的值将转换为 {{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)
函数。
第二种情况
<块引用>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,那么它只会返回给您一个字符串。