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

如何在C#中从列表的列表中同时迭代获取元素

遍历拆分后的列表列表以获取所有元素的解决方案

场景说明

你已经将包含5000个文件路径的List<string>拆分为5个子列表,现在需要高效遍历这些子列表的元素进行后续处理,避免多层嵌套foreach的冗余写法。


方案1:扁平化所有元素(不区分子列表)

如果不需要区分元素来自哪个子列表,只想一次性遍历所有文件路径,直接用SelectMany将嵌套列表扁平化为单个序列:

// 将所有子列表的元素合并为一个 IEnumerable<string>
var allFilePaths = list.SelectMany(subList => subList);

// 遍历所有元素
foreach (string filePath in allFilePaths)
{
    // 这里写你的处理逻辑
    Console.WriteLine(filePath);
}

方案2:按索引同步遍历各子列表元素

如果需要同时获取每个子列表对应位置的元素(比如取第1个子列表的第i个、第2个子列表的第i个……),由于你的拆分逻辑保证了所有子列表长度一致,可以通过索引循环实现:

// 假设所有子列表长度相同(你的Split方法已保证)
int elementCount = list[0].Count;

for (int i = 0; i < elementCount; i++)
{
    string fileFromList1 = list[0][i];
    string fileFromList2 = list[1][i];
    string fileFromList3 = list[2][i];
    string fileFromList4 = list[3][i];
    string fileFromList5 = list[4][i];

    // 处理这一组对应位置的元素
    Console.WriteLine($"First name is: {fileFromList1}");
    Console.WriteLine($"Second name is: {fileFromList2}");
    Console.WriteLine($"Third name is: {fileFromList3}");
    Console.WriteLine($"Fourth name is: {fileFromList4}");
    Console.WriteLine($"Fifth name is: {fileFromList5}");
}

方案3:获取所有元素的笛卡尔积(慎用)

如果需要生成所有子列表元素的组合(比如每个子列表取一个元素的所有可能搭配),可以用LINQ实现笛卡尔积,但注意5个各含1000元素的子列表会生成10^15种组合,仅在小规模场景下使用:

var cartesianProduct = from f1 in list[0]
                       from f2 in list[1]
                       from f3 in list[2]
                       from f4 in list[3]
                       from f5 in list[4]
                       select new { f1, f2, f3, f4, f5 };

foreach (var combo in cartesianProduct)
{
    Console.WriteLine($"组合:{combo.f1}, {combo.f2}, {combo.f3}, {combo.f4}, {combo.f5}");
}

关于你原有代码的说明

你提供的嵌套foreach加break的写法,实际上只获取了每个子列表的第一个元素就终止了循环,并没有遍历所有元素,上述方案可以根据你的实际需求选择使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:57:10