У меня есть следующий метод расширения, чтобы добавить элементы из одной коллекции в другую коллекцию:
public static void AddRange<T>(this ICollection<T> collection, IEnumerable<T> list)
{
foreach (var item in list)
{
collection.Add(item);
}
}
Это прекрасно работает, если список 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
Как мне изменить мой метод расширения, чтобы он мог делать что-то подобное, если тип IEnumerable является подклассом (или реализует интерфейс) типа T?