使用LINQ </t>更新通用列表<t>

时间:2012-05-25 09:36:35

标签: c# .net linq list

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

例如我有一个班级:

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

        public Name{ get; set }
}

现在我有List<ItemInfo> myList项目数。

并希望使用递增值

更新每个Item的ItemInfo.SRNO

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

一样更新
1
2
.
.
.
10

2 个答案:

答案 0 :(得分:3)

实际上你不需要像这样的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;
}

答案 1 :(得分:1)

你必须做到这一点势在必行。 LINQ不支持副作用(按设计),所以你必须使用和命令式构造(例如for循环)迭代列表。

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

你可以违反linq方法的一些意图,让他们做他们不想做的事情。例如,项目或选择操作数据的位置(至少通过引用。但它们从来没有为此设计,结果代码通常是一个眼睛。

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