为什么调用string.Split后用Convert.ToInt32转字符得到的数值发生变化?
问题原因
a.Split(',')执行后没有接收返回值,Split方法不会修改原字符串本身,你后续操作的仍然是原始的"4,3,2"字符串,并没有用到拆分后的结果。- 字符串的索引器
a[0]返回的是char字符类型的'4',不是字符串"4"。Convert.ToInt32传入char参数时,返回的是该字符对应的ASCII编码值:'4'的ASCII码为十进制52,'2'的ASCII码为十进制50,和你看到的错误输出完全吻合。 - 你直接调用
Console.WriteLine(a[0])输出4,是因为Console.WriteLine的char类型重载会直接输出字符的可视化内容,不会输出它的底层编码值,所以造成了“a[0]就是数字4”的错觉。
正确写法
string a = "4,3,2"; // 接收Split返回的字符串数组 string[] splitResult = a.Split(','); int one = Convert.ToInt32(splitResult[0]); int two = Convert.ToInt32(splitResult[2]);
执行上述代码后,one的值为4,two的值为2,符合预期。
内容的提问来源于stack exchange,提问作者Tian Le
相关产品推荐
相关产品推荐

