由於的ListCollectionView不支持索引(例如查看[0]),我發現通過過濾/排序列表進行迭代的唯一方法就是使用的foreach。通過迭代使用的ListCollectionView的foreach
1)會的foreach確保鑑於項目的順序迭代過程中被保留?如果不是,還有什麼選擇?
2)是否有一個強類型的ListCollectionView?我缺少了很多LINQ擴展方法,並具有很多FindMaxThis,FindFirstThat ... :)
由於的ListCollectionView不支持索引(例如查看[0]),我發現通過過濾/排序列表進行迭代的唯一方法就是使用的foreach。通過迭代使用的ListCollectionView的foreach
1)會的foreach確保鑑於項目的順序迭代過程中被保留?如果不是,還有什麼選擇?
2)是否有一個強類型的ListCollectionView?我缺少了很多LINQ擴展方法,並具有很多FindMaxThis,FindFirstThat ... :)
1)當您使用的foreach用的ListCollectionView,你可能會得到來自底層集合(InternalList財產)的枚舉。如果您使用列表<>的實例初始化它,那麼您可以確信枚舉將按順序排列。
2)有兩種方法可以做到這一點。首先,您可以使用內部列表並將其轉換爲強類型集合,或者將其引用存儲在類中的某處。其次是直接在ListCollectionView實例上使用Cast <>。對於性能關鍵的應用程序,我會選擇第一種方法。
var collection = new ListCollectionView(new List<int>());
var even = collection
.Cast<int>()
.Where(n => n%2 == 0);
嗨,作爲2號),我不能使用SourceCollection屬性(內部列表),因爲它包含了所有的項目,不是過濾/排序。這會產生與預期結果不同的結果。而且由於Cast <>調用會在每次創建新的可枚舉集合時創建,這會造成糟糕的性能。我不確定爲什麼在wppf中沒有強類型的可編輯集合視圖。 – Goran
從邏輯上看,似乎迭代保留了順序,否則可能得到不同的結果,僅僅是因爲它是迭代的第n次。迭代不能是隨機結果生成器。 – radarbob
嗯,我記得有一次我讀到它,答案是:取決於它迭代的集合...如果你看看SO,你會看到那裏有類似的問題。無論如何,名單將維持秩序是肯定的,而且我在使用列表所有的時間,所以我很安全 –
Goran