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

C#中如何用LINQ优雅实现仅更新长度为2的列表字符串元素?

用LINQ替代循环实现列表元素匹配更新

你有两个列表:dteSubstringList(元素包含Mte属性)和table(元素包含Data属性,字符串长度可变)。需求是:当table中元素的Data长度为2时,将其替换为dteSubstringList中对应顺序元素的Mte值。原循环实现如下:

int index = 0;

for (int i = 0; i < table.Count; i++)
{
    if (table[i].Data.Length == 2)
    {
        table[i].Data = dteSubstringList[index].Mte;

        index++;
    }
}

更优雅的LINQ实现方式

结合LINQ的筛选和序列配对能力,可以把逻辑拆解得更清晰,代码如下:

// 筛选出table中需要修改的元素,再和dteSubstringList按顺序配对
var updatePairs = table.Where(item => item.Data.Length == 2)
                       .Zip(dteSubstringList, (tableItem, substringItem) => new { tableItem, substringItem });

// 遍历配对结果完成赋值
foreach (var pair in updatePairs)
{
    pair.tableItem.Data = pair.substringItem.Mte;
}

逻辑说明

  1. Where(item => item.Data.Length == 2):从table中筛选出所有Data长度为2的元素,得到目标修改序列。
  2. Zip(dteSubstringList, ...):将筛选后的序列与dteSubstringList按顺序一一配对,每一对包含一个待修改的table元素和对应的dteSubstringList元素。
  3. 最后遍历配对结果,完成Data属性的更新。

这种方式比原循环更直观,自动处理了索引跟踪的逻辑,而且Zip会在两个序列中较短的那个结束时自动停止,避免索引越界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:52:05