You need to enable JavaScript to run this app. C#中List列表无法存储全部拆分输入 循环外仅获取最后一行首元素
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 10:27:03