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

C#不使用LINQ实现字符大小写互换出现索引越界错误如何解决

异常触发原因

  1. 外层循环边界判断错误:C# 数组索引范围为 0 到 数组长度 - 1,你的代码中a = convert.Length,外层循环判断写为b <= a,当b等于a时访问convert[b]已经超出数组边界。
  2. 内层循环缺少边界校验:所有嵌套的while循环仅判断了字符类型,未校验b < convert.Length,当b自增到数组长度后,后续访问convert[b]会直接触发越界。

其他逻辑错误

你的代码即使修复越界问题也无法得到正确转换结果:

  • char.ToLower()/char.ToUpper()是返回新字符的纯方法,不会修改原数组中的值,你没有将转换结果赋值回convert[b],原数组不会发生任何变化。
  • 小写字符的处理分支错误调用了char.ToLower(),大小写互换需要改为调用char.ToUpper()。

修复后的代码(基于原逻辑调整)

string text2 = "HELLO my friEND";
char[] convert = text2.ToCharArray();
int b = 0;
int a = convert.Length;
// 修正外层循环条件
while (b < a)
{
    // 所有内层循环增加边界判断
    while (b < a && char.IsUpper(convert[b]))
    {
        // 将转换结果赋值回数组
        convert[b] = char.ToLower(convert[b]);
        b++;
    }
    while (b < a && char.IsLower(convert[b]))
    {
        // 修正为转大写逻辑
        convert[b] = char.ToUpper(convert[b]);
        b++;
    }
    while (b < a && char.IsWhiteSpace(convert[b]))
    {
        b++;
    }
}
string hello = new string(convert);
Console.WriteLine(hello);
// 输出:hello MY FRIend

更简洁的实现方案

不需要嵌套多层while循环,使用单循环遍历每个字符单独处理即可,逻辑更清晰,出错概率更低:

string text2 = "HELLO my friEND";
char[] charArr = text2.ToCharArray();
for (int i = 0; i < charArr.Length; i++)
{
    if (char.IsUpper(charArr[i]))
    {
        charArr[i] = char.ToLower(charArr[i]);
    }
    else if (char.IsLower(charArr[i]))
    {
        charArr[i] = char.ToUpper(charArr[i]);
    }
    // 非字母字符直接保留
}
string result = new string(charArr);
Console.WriteLine(result);

内容的提问来源于stack exchange,提问作者CallumStanbury

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:15:06