我有以下的扩展方法在一个集合中添加元素到另一个集合:如何编写一个将不同类型作为参数的泛型方法?
public static void AddRange<T>(this ICollection<T> collection, IEnumerable<T> list)
{
foreach (var item in list)
{
collection.Add(item);
}
}
这工作得很好,如果IEnumerable的名单是相同类型的ICollection我试图将它添加到。但是,如果我有这样的事情:T形
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
如何修改我的扩展方法,以便能够做这样的事情,如果IEnumerable的类型是子类(或实现接口)类型?
感谢您的代码,它工作得很好!起初,我认为这意味着AddRange()期待键值对,但我认为它可以根据参数来区分差异。对,类型推断不是问题,这是类型转换的问题。 – 2009-11-18 21:16:59