如何将通用列表转换为列表?
我使用的是ListCollectionView
,我需要提供IList
而不是IList<T>
。
我看到很多示例可以将IList
转换为IList<T>
,但不是另一种方式。
我是否只是手动转换它(new List().AddRange(IList<T>
)?
答案 0 :(得分:10)
澄清其他答案:
IList<T>
不要求实施类型同时实施IList
。 IEnumerable<T>
确实需要IEnumerable
。我们可以使用IEnumerable<T>
来解决这个问题,因为T序列总是可以被视为一系列对象。但是长颈鹿的名单不能被视为对象列表;您可以将老虎添加到对象列表中。
但是,List<T>
不安全实施IList
。如果您尝试通过首先将老虎添加到IList来将老虎添加到List<Giraffe>
,那么您将获得例外。
所以回答这个问题:如果您拥有的只是一个IList<T>
,您可以推测性地使用“as”运算符将其强制转换为IList
,如果失败,则创建一个新的ArrayList
或List<object>
并复制内容。如果您拥有的是List<T>
,那么您已经拥有了直接实现IList
的内容。
答案 1 :(得分:9)
当List<T>
实现IList
界面时,您只需提供List<T>
即可。如果需要,只需投下它:
List<int> list = new List<int>();
IList ilist = (IList)list;
答案 2 :(得分:2)
您根本不需要进行任何转换。 List<T>
实现IList
接口。
如果您需要类型IList
来使用特定的重载,只需使用强制语法(IList)theList
。