Dan*_* T. 2 c# generics parameters extension-methods
我有以下扩展方法将一个集合中的元素添加到另一个集合:
public static void AddRange<T>(this ICollection<T> collection, IEnumerable<T> list)
{
foreach (var item in list)
{
collection.Add(item);
}
}
Run Code Online (Sandbox Code Playgroud)
如果IEnumerable列表与我试图将其添加到的ICollection的类型相同,则此方法可以正常工作.但是,如果我有这样的事情:
var animals = new List<Animal>();
var dogs = new List<Dog>(); // dog is a subclass of animal
animals.AddRange(dogs); // this line has a compiler error, it can't infer the type
Run Code Online (Sandbox Code Playgroud)
如果IEnumerable的类型是T类型的子类(或实现接口),如何修改我的扩展方法以便能够执行此类操作?
这个方法会给你你想要的:
public static void AddRange<A,B>(
this ICollection<A> collection,
IEnumerable<B> list)
where B: A
{
foreach (var item in list)
{
collection.Add(item);
}
}
Run Code Online (Sandbox Code Playgroud)
几个笔记: