我有以下的擴展方法在一個集合中添加元素到另一個集合:如何編寫一個將不同類型作爲參數的泛型方法?
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