使用 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:
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 方法的许多意图,并使它们执行它们不设计的内容。例如,有在哪里投影或选择操作数据(至少通过引用。但它们从来不是为此而设计的,生成的代码通常很碍眼。
在特定情况下使用适合您需求的构造,使用旨在产生副作用的东西。