我初始化一个仅由不超过 2 的数字组成的变量 g,然后初始化一个由三个元素组成的 bool 数组,在 f[g[0]] 处我得到一个异常,“索引超出了数组的边界。”既然 f[3] 为什么 g[0] = f.length 总是不管 g 的长度和 g[0] 的值?
字符串 g = "022";
bool[] f = { true, true, true };
Console.WriteLine(f[(int)g[0]]); Console.ReadLine();
因为
g
是 string
,所以 g[0]
是 char
。
(int)g[0]
正在将字符的 ASCII 值转换为 int
。'0'
的 ASCII 值为 48。
因此
f[(int)g[0]]
正在尝试访问索引 48 处的 f
,这是无效的。
如果你想访问索引0处的
f
,你可以使用:
f[(int)(g[0] -'0']
通过减去“0”(
'0'
的 ASCII),您将得到字符的数字值。