将 ICollection<Bar>
转换为 ICollection<IBar>
的推荐方法是什么,其中 Bar
实现 IBar
?
是不是就这么简单
collection = new List<Bar>();
ICollection<IBar> = collection as ICollection<IBar>?
或者有更好的方法吗?
最佳答案
您必须转换列表中的每个项目并创建一个新项目,例如使用 Cast
:
ICollection<IBar> ibarColl = collection.Cast<IBar>().ToList();
在 .NET 4 中,使用
IEnumerable<T>
的协方差:ICollection<IBar> ibarColl = collection.ToList<IBar>();
或使用
List.ConvertAll
:ICollection<IBar> ibarColl = collection.ConvertAll(b => (IBar)b);
后者可能会更有效一点,因为它事先知道大小。
关于c# - 将具体类型的 ICollection 转换为具体类型接口(interface)的 ICollection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34857758/