You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何字符串首元素转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,提问作者Саша Голованов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:00:06