Unity变量初始化触发IndexOutOfRangeException问题求助
解决IndexOutOfRangeException在Split('\n')初始化处的问题
- 先明确:
Split('\n')本身不会抛出IndexOutOfRangeException,异常大概率是你在变量初始化语句里直接访问了拆分后数组的某个索引(比如string line = output.Split('\n')[1];),而当前output的内容行数不足以支撑这个索引访问。
排查与解决步骤:
检查第14行完整代码
看是不是直接对Split结果做了索引取值,比如想直接获取第二行就写output.Split('\n')[1]。如果output只有一行内容,拆分后的数组只有lines[0],访问[1]自然会触发越界异常。而把Split放到File.WriteAllLines参数里时,方法会直接处理整个数组,不会主动访问超出范围的索引,所以不会报错。修改代码逻辑
先将拆分结果赋值给数组变量,检查长度后再访问索引:string[] lines = output.Split('\n'); // 比如要访问索引1的元素,先判断长度 if (lines.Length > 1) { string targetLine = lines[1]; // 你的业务逻辑 } else { Debug.LogWarning("输出内容行数不足,无法访问指定位置"); }处理跨平台换行符问题
如果你的游戏需要跨平台运行,建议改用兼容\r\n(Windows)和\n(Linux/macOS)的拆分方式,避免出现空元素:string[] lines = output.Split(new[] {'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries);兜底空值判断
虽然你说output内容有效,但可以加个非空判断避免极端情况:if (!string.IsNullOrEmpty(output)) { string[] lines = output.Split('\n'); // 后续逻辑 }
内容的提问来源于stack exchange,提问作者Mokka Chocolata
相关产品推荐
相关产品推荐

