我正在寻找更新通用列表项的索引属性的方法。
例如我有一个班级:
public class ItemInfo
{
public int SRNO { get; set }
public Name{ get; set }
}
现在我有List<ItemInfo> myList
项目数。
并希望使用递增值
更新每个Item的ItemInfo.SRNO如果列表项有10个项目,那么“SRNO”应该像
一样更新1
2
.
.
.
10
答案 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方法的一些意图,让他们做他们不想做的事情。例如,项目或选择操作数据的位置(至少通过引用。但它们从来没有为此设计,结果代码通常是一个眼睛。
在特定情况下使用适合您需要的构造使用旨在产生副作用的东西。