2010-07-20 72 views
4

我無法理解此方法的重載的MSDN文檔,該方法接受一個謂詞,其中有兩個參數據推測,int可以表示源元素的索引,無論這意味着什麼(我認爲一個枚舉是一個序列,你看不到比下一個項目更遠,更不用說索引)。請解釋System.Linq.Enumerable.Where(Func <T,int,bool>謂詞)

有人可以請解釋如何使用這個重載,特別是那些在Func中的int是什麼以及它是如何使用的?

+2

這一個? http://msdn.microsoft.com/en-gb/library/bb549418.aspx – Rup 2010-07-20 09:09:47

+0

謝謝,Rup。我現在明白了,但是我的某些東西拒絕了這種界面。我似乎無法站在同一句話中的索引和順序。但你提供的鏈接回答了我的問題,它教會了我如何使用該方法,所以,非常感謝。 – 2010-07-20 15:07:40

回答

6

int參數表示當前迭代內的當前項目的索引。每次調用其中一種LINQ擴展方法時,理論上不保證以相同的順序返回項目,但是您知道它們全部都會被返回一次,因此可以分配索引。 (當然,你如果知道查詢對象爲一般一個List<T>或這樣的,但不能保證。)

例子:

var result1 = myEnumerable.Where((item, index) => index < 4); 
var result2 = myEnumerable.Take(4); 
// result1 and result2 are equivalent. 
+0

非常感謝Noldorin的偉大解釋。你做了一個有趣的觀察。在哪些情況下,您不確定物品退回的順序?你能詳細說明一下嗎? – 2010-07-20 15:09:46

4

你可以以同樣的方式不是指數的IEnumerable<T>可以一個數組,但是您可能能夠使用索引以某種方式過濾列表,或者可以索引將在條件中使用的另一個集合中的某些數據。

編輯:舉個例子,跳過你可以使用所有其他元素:

var results = sequence.Where((item, idx) => idx % 2 == 0); 
+0

謝謝,李。當然,我現在明白了這一點,但對我個人而言,這似乎並不直觀。我不知道是什麼,但是這個界面出現了一些錯誤。 – 2010-07-20 15:11:45

相關問題