Если ваш код просто повторяет последовательность внутри метода (не добавляя, не удаляя и не обращаясь по индексу), измените ваш метод на один из следующих
DoSomething(IEnumerable<IMyInterface> sequence)
DoSomething<T>(IEnumerable<T> sequence) where T : IMyInterface
Интерфейс IEnumerable<>
ковариантный (по состоянию на .NET 4) (первый вариант).Или вы можете использовать последнюю сигнатуру при использовании C # 3.
В противном случае, если вам нужны индексированные операции, преобразуйте список перед его передачей.В вызове у вас может быть
// invocation using existing method signature
DoSomething(yourList.Cast<IMyInterface>().ToList());
// or updating method signature to make it generic
DoSomething<T>(IList<T> list) where T : IMyInterface
. Последняя подпись позволит вам также поддерживать добавление или удаление в список (видимый на месте вызова), а также позволит вам использоватьсписок без предварительного копирования.
Тем не менее, если все, что вы делаете, это перебираете список в цикле, я бы предпочел метод, принимающий IEnumerable<>
.