2012-05-25 48 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方法的意圖,並讓他們做的事情,他們的計劃不是爲了。例如,有項目或選擇操縱數據(至少通過引用),但他們從來沒有爲此設計,所產生的代碼通常是一個盲目的人。以創建副作用