解析两种格式CommandLine时出现数组越界问题如何解决?
问题修复方案
核心问题为代码直接硬编码访问Parameters[1],当命令只有1个参数时,Split(',')得到的数组长度为1,访问下标1自然触发数组越界异常。同时现有代码还存在冗余循环、缺少边界校验、输入容错性差的问题。
修复步骤
- 移除无意义的外层for循环:循环体未使用循环变量i,完全是冗余逻辑,会重复执行相同的解析操作。
- 增加前置边界校验:按空格拆分命令行后,先判断数组长度是否≥2,避免命令未携带参数时访问
CommandLineText[1]引发越界。 - 按参数数组长度动态取值:拆分逗号得到参数数组后,先判断长度再决定是否读取第二个参数。
- 可选优化:将
Int32.Parse替换为Int32.TryParse,避免参数不是合法数字时抛出格式异常。
修复后代码示例
// 拆分命令行,自动忽略多余空格 string[] commandLineText = CommandLine.Text.Split(' ', StringSplitOptions.RemoveEmptyEntries); // 校验至少包含命令名和参数两部分 if (commandLineText.Length < 2) { // 可自行添加无参数的错误处理逻辑 return; } string command = commandLineText[0].ToLower().Trim(); string values = commandLineText[1]; // 拆分参数,自动忽略多余逗号 string[] parameters = values.Split(',', StringSplitOptions.RemoveEmptyEntries); // 解析第一个参数 if (!Int32.TryParse(parameters[0], out int x)) { // 第一个参数不合法的错误处理 return; } // 仅当存在第二个参数时解析Y,可自行设置Y的默认值 int y = 0; if (parameters.Length >= 2) { if (!Int32.TryParse(parameters[1], out y)) { // 第二个参数不合法的错误处理 return; } }
内容的提问来源于stack exchange,提问作者IronMike
相关产品推荐
相关产品推荐

