如何转换通用IList IList?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何转换通用IList IList?相关的知识,希望对你有一定的参考价值。

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

如果有另一种方法来创建一个ListCollectionView与通用IList<T>我想听听:)

答案

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

如果你能找到一种通过List<T>而不是IList<T>(或其他类型实现IList以及IList<T>,如ObservableCollection<T>)的方法,那将是最简单的。这可能意味着更改您的应用程序,以便您传递List<T>或其他东西而不是IList<T>

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

另一答案

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

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

以上是关于如何转换通用IList IList?的主要内容,如果未能解决你的问题,请参考以下文章

DataTable转换成IList

将 IList<T> 转换为 BindingList<T>

无法将类型“IQueryable”隐式转换为 Generic.IList' 从 EF 上下文中检索记录列表作为列表

使用反射在 IList<T> 中查找 <T> [重复]

无法从“System.Collections.IList”转换为“System.Collections.Generic.IEnumerable<T>”

将行号列添加到 IList<T>