2012-05-25 34 views
1

我正在寻找一种方法来更新通用列表项的索引属性。更新通用列表<T>使用LINQ

比如我有一个类:

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

     public Name{ get; set } 
} 

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

,并要更新每个项目的ItemInfo.SRNO与递增值

一样,如果列表项有10个项目,然后“SRNO”应该像

1 
2 
. 
. 
. 
10 
+2

你需要什么?您可以通过简单地在列表中迭代for()循环来获得此索引。 – YavgenyP

回答

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 -loop:

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

感谢Abatishchev为您的快速响应 但我不想循环.. 哪一个对性能循环或LINQ有好处? –

+3

linq循环在扩展方法的下面。没有不可思议的方法来避免循环(我担心人们会认为是发生了什么当你使用LINQ时) – YavgenyP

1

你将不得不这样做势在必行。 LINQ不支持副作用(通过设计),所以你将不得不遍历你的列表使用和命令式结构,如for循环。

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

可以违反不少的LINQ方法的意图,并让他们做的事情,他们的计划不是为了。例如,有项目或选择操纵数据(至少通过引用),但他们从来没有为此设计,所产生的代码通常是一个盲目的人。以创建副作用