1

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

例如我有一堂课:

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

        public Name{ get; set }
}

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

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

就像如果列表项有 10 个项目,那么“SRNO”应该像这样更新

1
2
.
.
.
10
4

2 回答 2

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;
}
于 2012-05-25T09:44:12.720 回答
1

你将不得不这样做。LINQ 不支持副作用(按设计),因此您必须使用和命令式构造(例如 for 循环)遍历列表。

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

您可以违反很多 linq 方法的意图,并让它们做它们不打算做的事情。例如,在 where project 或 select 操作数据(至少通过引用。但它们从未为此设计,并且生成的代码通常令人眼花缭乱。

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

于 2012-05-25T09:46:04.773 回答