如何将实现了 IBar
接口的 ICollection<Bar>
转换为 ICollection<IBar>
接口建议使用什么方法?
是不是很简单,只需要使用下面的代码:
collection = new List<Bar>();
ICollection<IBar> = collection as ICollection<IBar>?
还有更好的方法吗?
如何将实现了 IBar
接口的 ICollection<Bar>
转换为 ICollection<IBar>
接口建议使用什么方法?
是不是很简单,只需要使用下面的代码:
collection = new List<Bar>();
ICollection<IBar> = collection as ICollection<IBar>?
您需要将列表中的每个项目进行强制转换并创建一个新的项目,例如使用Cast
:
ICollection<IBar> ibarColl = collection.Cast<IBar>().ToList();
IEnumerable<T>
的协变:ICollection<IBar> ibarColl = collection.ToList<IBar>();
或者使用List.ConvertAll
方法:
ICollection<IBar> ibarColl = collection.ConvertAll(b => (IBar)b);
ICollection<T>
实例来添加项目和操作集合? - Shimmy Weitzhandler你无法将类型转换为 ICollection<IBar>
,但是你可以转换为 IEnumerable<IBar>
。
因此,如果你不打算向列表中添加任何内容,你可以这样做:
IEnumerable<IBar> enumeration = (IEnumerable<IBar>)collection;
其他答案中的解决方案实际上不会进行强制转换,而是创建一个新列表,它将不反映对原始列表的后续更改。
只需将所有条目转换为
ICollection<IBar> ibars = collection.ConvertAll(bar => (IBar)bar);
我认为这种变体也是可读的。也许有更高性能的转换方式...
null
作为as
运算符的结果。) - Jon SkeetICollection<IBar>
,但是你可以将其转换为IEnumerable<IBar>
。 - Henrik