Se il codice è semplicemente iterazione di sequenza all'interno del metodo (non aggiunta, la rimozione o l'accesso per indice), cambiare il metodo di una delle seguenti
DoSomething(IEnumerable<IMyInterface> sequence)
DoSomething<T>(IEnumerable<T> sequence) where T : IMyInterface
L'interfaccia IEnumerable<>
è covariante (come di .NET 4) (prima opzione). Oppure puoi utilizzare quest'ultima firma se usi C# 3.
Altrimenti, se hai bisogno di operazioni indicizzate, converti l'elenco prima di passarlo. Nel invocazione, si potrebbe avere
// 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
Che quest'ultimo firma permetterebbe di fare è quello di sostenere anche aggiunge o rimuove alla lista (visibile in callsite), e sarebbe anche consentire di utilizzare la lista senza prima copiandolo.
Anche se tutto ciò che fai è scorrere l'elenco in un ciclo, preferirei un metodo che accetta IEnumerable<>
.
fonte
2011-10-03 02:21:59
qual è il tuo codice? – talnicolas