使用 LINQ 更新泛型列表

本文关键字:列表 泛型 LINQ 更新 使用 | 更新日期: 2023-09-27 18:35:14

我正在寻找一种更新通用列表项的索引属性的方法。

例如,我有一个类:

public class ItemInfo
{
        public int SRNO { get; set }
        public Name{ get; set }
}

现在我已经List<ItemInfo> myList了项目的数量。

并希望使用递增的值更新每个项目的 ItemInfo.SRNO

就像如果列表项有 10 个项目,那么"SRNO"应该像

1
2
.
.
.
10

使用 LINQ 更新泛型列表<T>

实际上你不需要这样的 LINQ:

infoList.Select((info, i) => { info.SRNO = i + 1; return info });

Enumerable.Range(0, infoList.Count).Select(i =>
    {
        var info = infoList[i];
        info.SRNO = i+1;
        return info;
    });

使用简单的for循环:

for (int i = 0; i < infoList.Count; i++)
{
    info[i].SRNO = i + 1;
}

你必须这样做。LINQ 不支持副作用(按设计),因此您必须使用命令性构造(如 for 循环)循环访问列表。

for(var i = 0;i<infoList.Count;){
    infoList[i].SRNO = ++i;
}

您可能会违反 LINQ 方法的许多意图,并使它们执行它们不设计的内容。例如,有在哪里投影或选择操作数据(至少通过引用。但它们从来不是为此而设计的,生成的代码通常很碍眼。

在特定情况下使用适合您需求的构造,使用旨在产生副作用的东西。