C#中List列表无法存储全部拆分输入 循环外仅获取最后一行首元素
问题核心原因
你的代码存在列表实例被反复覆盖的逻辑问题:
- 虽然你在逐行读取的循环外部提前初始化了
fields列表,但在循环内部每处理一行,就执行fields = new List<string>(...),相当于直接把之前列表存的所有内容清空,换了一个全新的空列表来存当前行的拆分结果 - 等所有行遍历完成后,
fields里自然只剩最后一行拆分出来的"4","5","6",第一行存的"1","2","3"早就被完全覆盖丢失了 - 你觉得“列表里仅存了4”是个观察错觉:后续遍历列表的步长是3,只会取索引0的第一个元素打印,刚好就是最后一行的第一个值
"4",并不是列表真的只存了这一个元素。
修复方案
不要在循环里给fields重新赋值新建列表,改成把每行拆分得到的元素追加到初始化好的同一个列表实例里,保证所有行的拆分内容能累积存储。
修正后的代码:
private static int searchNim(string nim, string filepath) { // 全程复用同一个List实例,初始化仅执行1次 List<string> fields = new List<string>(); string[] lines = System.IO.File.ReadAllLines(@filepath); for (int x = 0; x < lines.Length; x++) { // 追加当前行拆分的所有元素,不覆盖原有内容 fields.AddRange(lines[x].Split(',')); } // 原有查找逻辑保持不变 for (int x = 0; x < fields.Count; x += 3) { Debug.Log(fields[x]); if (nim == fields[x]) { return x; } } return -1; }
运行效果校验
按你给出的示例输入,代码跑完后的fields列表会完整存储所有拆分元素:["1","2","3","4","5","6"],列表在遍历循环外部可以正常访问,不会再出现内容丢失的问题。
内容的提问来源于stack exchange,提问作者hndsmkkgr
相关产品推荐
相关产品推荐

