如何将一个Generic IList<T>转换为IList?

5
我想创建一个具有通用 IList<T>ListCollectionView,但构造函数却得到了非通用的 IList。 如何将我的列表从 IList<T> 转换为 IList
如果有其他方法可以创建具有通用 IList<T>ListCollectionView,我很乐意听取 :)

1
令我惊讶的是,IList<T> 没有实现 IList 接口。我原以为它会实现。 - ProgrammingLlama
2个回答

6
令人恼火的是,IList<T>是那些不实现它的非泛型接口IList之一。
如果你能找到一种方法来传递List<T>而不是IList<T>(或其他实现了IListIList<T>的类型,如ObservableCollection<T>),那么这将是最容易的。这可能意味着更改您的应用程序,以便您传递一个List<T>或其他东西而不是IList<T>
否则,您可能需要使用IList<T>中的元素创建一个新的List<T>,并传递它(即myList.ToList())。请注意,这意味着您已经创建了列表的副本,因此对原始副本的更改不会反映在副本中。特别是,ListCollectionView检查源集合是否实现了INotifyCollectionChanged,如果是,则订阅集合更改事件:如果您创建列表的副本,这显然行不通。

4

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

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

由于LINQ方法.ToList()返回List<T>,而IList<T>要求您还实现IEnumerable<T>,因此似乎最简单的解决方案可能只是yourIList.ToList() :) - ProgrammingLlama
@John 是的,那肯定也可以。但是这个也可以,所以我其实不确定该选哪个作为我的答案... - ProgramFOX
的确,我只是觉得我的贡献并不足以单独成篇,而是对你的工作进行了补充。 - ProgrammingLlama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接