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

C# 移除空字符数组或跳过空组 解决索引越界异常问题

问题根因

你遇到的IndexOutOfRangeException异常本质是字符分组中存在空数组:当用户未勾选对应字符集、或自定义输入内容为空时,对应分组调用ToCharArray()后得到的是长度为0的空数组,代码随机选中该分组时,访问数组任意索引都会触发越界。

你当前写的try-catch逻辑无法解决这个问题:空分组对应的lastCharIdx为-1,无论怎么重新生成随机索引,访问空数组都会抛出异常。


修复方案

最优方案是初始化字符分组时直接过滤掉所有空分组,从根源上避免随机选到空分组:

第一步:修改字符分组初始化逻辑

将原有的charGroups初始化逻辑替换为如下代码,自动过滤长度为0的空分组:

// 生成所有字符分组后直接过滤空分组
char[][] charGroups = new char[][]
{
    CapitalCharacterSet.ToCharArray(),
    LowercaseCharacterSet.ToCharArray(),
    NumbersCharacterSet.ToCharArray(),
    IncludeCharacterSet.ToCharArray(),
    SpecialCharacterSet.ToCharArray()
}.Where(g => g.Length > 0).ToArray();

// 增加校验:如果所有分组都为空,提前抛出提示/终止逻辑,避免后续报错
if (charGroups.Length == 0)
{
    throw new InvalidOperationException("请至少选择一类字符用于生成结果");
}

后续的charsLeftInGroup、leftGroupsOrder初始化逻辑不需要改动,因为它们会自动基于过滤后的非空分组生成,后续随机选取分组时永远不会命中空分组,不会再触发越界异常。


可选优化:移除无效try-catch

既然已经从源头上避免了空分组,原代码里包裹赋值逻辑的try-catch已经没有作用,可以直接删除,减少不必要的性能损耗。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:15:02