使用foreach迭代ListCollectionView

时间:2012-05-20 03:04:40

标签: c# .net wpf

由于ListCollectionView不支持索引器(ex View [0]),我发现迭代筛选/排序列表的唯一方法是使用foreach。

1)foreach会确保在迭代期间保留视图中项目的顺序吗?如果没有,有什么替代方案?

2)是否有强类型的ListCollectionView?我错过了很多linq扩展方法,并且有很多FindMaxThis,FindFirstThat ...... :)

1 个答案:

答案 0 :(得分:1)

1)当您使用带有ListCollectionView的foreach时,您可能会从底层集合中获取一个Enumerator( InternalList 属性)。如果使用List<>的实例对其进行初始化那么你可以非常肯定枚举将是有序的。

2)有两种选择。首先,您可以使用内部列表,并将其强制转换为强类型集合,或者在类中的某个位置存储对它的引用。其次是直接在ListCollectionView实例上使用 Cast<> 。对于性能关键应用程序,我会选择第一种方法。

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