2010-06-06 122 views
1

我有一個列表/數組,並且需要處理某些元素,但也需要處理中的元素索引。 例子:LINQ/C#:Where&Foreach在列表/數組中使用索引

List Names = john, mary, john, bob, simon 
Names.Where(s => s != "mary").Foreach(MyObject.setInfo(s.index, "blah") 

但不能使用「指數」與財產清單,如果成反比的名字是在一個陣列,我不能使用的foreach ... 有什麼建議?

+2

你想過濾的一整套原始集合中的指數或指數? – SLaks 2010-06-06 11:50:03

+0

[C#foreach with index]的可能重複(http://stackoverflow.com/questions/521687/c-sharp-foreach-with-index) – Xian 2012-02-09 22:45:36

回答

7

你應該用一個簡單的循環for,像這樣:

var someNames = Names.Where(s => s != "mary").ToArray(); 

for (int i = 0; i < someNames.Length; i++) 
    someNames.setInfo(i, "blah"); 

LINQ是不是BE-全部結束時,所有的基本循環和。

如果你真的使用LINQ,你需要調用Select

Names.Where(s => s != "mary").Select((s, i) => new { Index = i, Name = s }) 
+2

如果你打算推薦一個for循環,那麼我建議你把for循環中的條件,而不是先使用Linq,然後遍歷數組。 – 2013-08-18 16:08:33

2

是的,有沒有使用循環的方式。

你只需要.ToList().Where()條款

Names.Where(s => s != "mary").ToList().Foreach(MyObject.setInfo(s.index, "blah"); 
1

的foreach從集合中的每個元素執行。 價:https://msdn.microsoft.com/en-us/library/bwabdf9z(v=vs.110).aspx

下面是您的情況下,示例代碼

List<string> Names = new List<string> { "john", "mary", "john", "bob", "simon" }; 

int index = 0; 

Names.Where(s => s != "mary").ToList().ForEach(x => printItem(index++,x)); 

printItem方法

public static void printItem(int index, string name){ 
    Console.WriteLine("Index = {0}, Name is {1}",index,name); 
} 

輸出:

索引= 0,名字是約翰

指數= 1,名字是約翰

指數= 2,名稱是Bob

指數= 3,名稱是西蒙