2012-05-20 139 views
1

由於的ListCollectionView不支持索引(例如查看[0]),我發現通過過濾/排序列表進行迭代的唯一方法就是使用的foreach。通過迭代使用的ListCollectionView的foreach

1)會的foreach確保鑑於項目的順序迭代過程中被保留?如果不是,還有什麼選擇?

2)是否有一個強類型的ListCollectionView?我缺少了很多LINQ擴展方法,並具有很多FindMaxThis,FindFirstThat ... :)

+0

從邏輯上看,似乎迭代保留了順序,否則可能得到不同的結果,僅僅是因爲它是迭代的第n次。迭代不能是隨機結果生成器。 – radarbob

+0

嗯,我記得有一次我讀到它,答案是:取決於它迭代的集合...如果你看看SO,你會看到那裏有類似的問題。無論如何,名單將維持秩序是肯定的,而且我在使用列表所有的時間,所以我很安全 – Goran

回答

1

1)當您使用的foreach用的ListCollectionView,你可能會得到來自底層集合(InternalList財產)的枚舉。如果您使用列表<>的實例初始化它,那麼您可以確信枚舉將按順序排列。

2)有兩種方法可以做到這一點。首先,您可以使用內部列表並將其轉換爲強類型集合,或者將其引用存儲在類中的某處。其次是直接在ListCollectionView實例上使用Cast <>。對於性能關鍵的應用程序,我會選擇第一種方法。

var collection = new ListCollectionView(new List<int>()); 
var even = collection 
    .Cast<int>() 
    .Where(n => n%2 == 0); 
+0

嗨,作爲2號),我不能使用SourceCollection屬性(內部列表),因爲它包含了所有的項目,不是過濾/排序。這會產生與預期結果不同的結果。而且由於Cast <>調用會在每次創建新的可枚舉集合時創建,這會造成糟糕的性能。我不確定爲什麼在wppf中沒有強類型的可編輯集合視圖。 – Goran