Если вы оказались в ситуации, когда универсальные типы не являются вариантами, следующий метод расширения может облегчить вашу жизнь:
public static void AddRange<TList,TOther>(this List<TList> list, IEnumerable<TOther> collection) where TOther: TList {
foreach(TOther e in collection) {
list.Add(e);
}
}
Вместо того, чтобы наследовать от List<T>
или иметь этот метод в каком-либо служебном классе, его использование в качестве метода расширения упрощает использование. Вы также можете воспользоваться выводом, так что этот ранее недействительный вызов станет действительным без каких-либо изменений:
List<Animal> animals;
List<Dog> dogs;
animals.AddRange(dogs);