Si el código es simplemente iterar sobre la secuencia dentro del método (no añadir, eliminar, o acceder por índice), cambiar su método a una de las siguientes
DoSomething(IEnumerable<IMyInterface> sequence)
DoSomething<T>(IEnumerable<T> sequence) where T : IMyInterface
La interfaz IEnumerable<>
es covariante (como de .NET 4) (primera opción). O puede usar la última firma si usa C# 3.
De lo contrario, si necesita operaciones indexadas, convierta la lista antes de pasarla. En la invocación, es posible que tenga
// 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
Lo que esta última firma le permitiría hacer es apoyar también permite añadir o eliminar de la lista (visible en la callsite), y también le permitirá utilizar la lista sin primero copiándolo.
Aún así, si todo lo que haces es iterar sobre la lista en un bucle, yo preferiría un método que acepte IEnumerable<>
.
¿cuál es su código? – talnicolas