我想用通用的ListCollectionView
创建一个IList<T>
,但是构造函数得到一个非通用的IList
。
如何将列表从IList<T>
转换为IList
?
如果还有另一种方法可以使用通用的ListCollectionView
创建IList<T>
,我想听听:)
答案 0 :(得分:6)
令人讨厌的是,IList<T>
是那些没有实现其非泛型对应物IList
的接口之一。
如果您找到一种传递List<T>
而不是IList<T>
的方法(或其他实现IList
和IList<T>
的其他类型,例如{{ 1}}),这将是最简单的。这可能意味着更改应用程序,以使您传递ObservableCollection<T>
或其他内容而不是List<T>
。
否则,您可能必须使用IList<T>
中的元素创建一个新的List<T>
,并将其传递(即IList<T>
)。请注意,这意味着您已经创建了列表的副本,因此对原始列表所做的更改不会反映在副本中。具体来说,myList.ToList()
检查源集合是否实现了ListCollectionView
,如果是的话,则订阅了集合更改的事件:如果创建列表的副本,这显然将不起作用。
答案 1 :(得分:4)
List<T>
实现IList
(IList<T>
不是)。从您的List<T>
创建一个IList<T>
,并将其传递给ListCollectionView
构造函数:
ListCollectionView lcv = new ListCollectionView(new List<YourType>(yourIList));