如何将通用IList <t>转换为IList?

时间:2019-04-14 12:58:37

标签: c# wpf

我想用通用的ListCollectionView创建一个IList<T>,但是构造函数得到一个非通用的IList。 如何将列表从IList<T>转换为IList

如果还有另一种方法可以使用通用的ListCollectionView创建IList<T>,我想听听:)

2 个答案:

答案 0 :(得分:6)

令人讨厌的是,IList<T>是那些没有实现其非泛型对应物IList的接口之一。

如果您找到一种传递List<T>而不是IList<T>的方法(或其他实现IListIList<T>的其他类型,例如{{ 1}}),这将是最简单的。这可能意味着更改应用程序,以使您传递ObservableCollection<T>或其他内容而不是List<T>

否则,您可能必须使用IList<T>中的元素创建一个新的List<T>,并将其传递(即IList<T>)。请注意,这意味着您已经创建了列表的副本,因此对原始列表所做的更改不会反映在副本中。具体来说,myList.ToList()检查源集合是否实现了ListCollectionView,如果是的话,则订阅了集合更改的事件:如果创建列表的副本,这显然将不起作用。

答案 1 :(得分:4)

List<T>实现IListIList<T>不是)。从您的List<T>创建一个IList<T>,并将其传递给ListCollectionView构造函数:

ListCollectionView lcv = new ListCollectionView(new List<YourType>(yourIList));