我正在寻找一种更新通用列表项的索引属性的方法。
例如我有一堂课:
public class ItemInfo
{
public int SRNO { get; set }
public Name{ get; set }
}
现在我有List<ItemInfo> myList
很多项目。
并希望使用递增值更新每个 Item 的 ItemInfo.SRNO
就像如果列表项有 10 个项目,那么“SRNO”应该像这样更新
1
2
.
.
.
10
实际上你不需要这样的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 方法的意图,并让它们做它们不打算做的事情。例如,在 where project 或 select 操作数据(至少通过引用。但它们从未为此设计,并且生成的代码通常令人眼花缭乱。
在特定情况下使用适合您需要的构造,使用旨在产生副作用的东西。