2011-01-15 44 views

risposta

99

Non è necessario convertirlo. List<T> implementa l'interfaccia IEnumerable<T> quindi è già un enumerabile.

Questo significa che si può benissimo avere il seguente:

public IEnumerable<Book> GetBooks() 
{ 
    List<Book> books = FetchEmFromSomewhere();  
    return books; 
} 

così come:

public void ProcessBooks(IEnumerable<Book> books) 
{ 
    // do something with those books 
} 

che potrebbe essere invocato:

List<Book> books = FetchEmFromSomewhere();  
ProcessBooks(books); 
3
IEnumerable<Book> _Book_IE; 
List<Book> _Book_List; 

Se si tratta di la variante generica:

_Book_IE = _Book_List; 

Se si desidera convertire il non generico uno:

IEnumerable ie = (IEnumerable)_Book_List; 
+5

Non hai bisogno del cast qui. –

+2

Lo fai se vuoi i metodi specifici dall'interfaccia non generica, dato che alcuni di essi sono esplicitamente implementati, o sono sulla strada sbagliata qui? – Femaref

11

Per quanto ne so List<T> implementa IEnumerable<T>. Significa che non devi convertire o trasmettere nulla.

+1

Dipende. Se si tenta di impostare un 'IEnumerable >' a un 'IEnumerable >' fornisce un errore del compilatore poiché il secondo non eredita dal primo. – Emaborsa

12

perché non utilizzare un rivestimento singolo ...

IEnumerable<Book> _Book_IE= _Book_List as IEnumerable<Book>; 
23

È possibile utilizzare il metodo di estensione AsEnumerable in Assembly System.Core e System.Linq namespace:

List<Book> list = new List<Book>(); 
return list.AsEnumerable(); 

Questo, come detto su this MSDN link cambia il tipo di Lista in fase di compilazione. Ciò ti darà anche i vantaggi di enumerare solo la tua raccolta di cui avevamo bisogno (vedi l'esempio MSDN per questo).

+0

Sembra semplice ma rende il modo più semplice per convertire. Grazie –

1

È necessario

using System.Linq; 

utilizzare IEnumerable opzioni a vostra List.

Problemi correlati