为何字符串首元素转int作为bool数组索引时,值恒等于数组长度?
问题原因与解决方法
核心原因
你犯了典型的类型转换误区:g[0]是char类型,直接用(int)强制转换时,得到的是该字符的ASCII码值,不是你预期的数字本身。
- 比如字符'0'的ASCII码是48,'2'是50,这些值远大于数组
f的最大合法索引(数组长度为3,合法索引仅0、1、2),所以必然抛出“索引超出数组界限”的异常。 - 你觉得“转换后的值总是等于f.length”是误读,实际异常中的索引值远大于3,只是你误解了提示内容。
解决方法
要把字符形式的数字转换成对应整数,有三种常用方式:
- 方式一:利用ASCII码连续性
字符'0'到'9'的ASCII码是连续递增的,用目标字符减去'0'的ASCII码,就能得到对应数字:int index = g[0] - '0'; - 方式二:使用
char.GetNumericValue方法
这个方法专门用于获取字符对应的数字值,返回double类型,再转成int即可:int index = (int)char.GetNumericValue(g[0]); - 方式三:安全解析(推荐)
如果不确定字符是否为合法数字,用int.TryParse可以避免意外错误:if (int.TryParse(g[0].ToString(), out int index) && index >= 0 && index < f.Length) { Console.WriteLine(f[index]); } else { Console.WriteLine("无效的索引值"); }
修正后的完整代码示例
string g = "022"; bool[] f = { true, true, true }; // 用方式一获取合法索引 int index = g[0] - '0'; Console.WriteLine(f[index]); Console.ReadLine();
内容的提问来源于stack exchange,提问作者Саша Голованов
相关产品推荐
相关产品推荐

