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

时间:2011-05-11 14:35:14

标签: c# generics

如何将通用列表转换为列表?

我使用的是ListCollectionView,我需要提供IList而不是IList<T>

我看到很多示例可以将IList转换为IList<T>,但不是另一种方式。

我是否只是手动转换它(new List().AddRange(IList<T>)?

3 个答案:

答案 0 :(得分:10)

澄清其他答案:

IList<T> 要求实施类型同时实施IListIEnumerable<T>确实需要IEnumerable。我们可以使用IEnumerable<T>来解决这个问题,因为T序列总是可以被视为一系列对象。但是长颈鹿的名单不能被视为对象列表;您可以将老虎添加到对象列表中。

但是,List<T> 不安全实施IList。如果您尝试通过首先将老虎添加到IList来将老虎添加到List<Giraffe>,那么您将获得例外。

所以回答这个问题:如果您拥有的只是一个IList<T>,您可以推测性地使用“as”运算符将其强制转换为IList,如果失败,则创建一个新的ArrayListList<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