Converti da List in formato IEnumerable


97
IEnumerable<Book> _Book_IE
List<Book> _Book_List

Come devo fare per convertire _Book_Listin IEnumerableformato?


58
La tua convenzione sui nomi è purtroppo unica.
Kirk Woll

6
Almeno ha una convenzione, eh?
Femaref

1
Per le persone che si chiedono perché il commento di Kirk abbia così tanti "aumenti", è perché non puoi semplicemente nominare la tua variabile nel modo desiderato! ci sono convenzioni per questo, ed è altamente raccomandato seguirle, in modo che il tuo codice possa essere chiaro e comprensibile, questo aiuterà le persone che cercano di aiutarti in posti come Stack-overflow o GitHub! per ulteriori informazioni leggere il libro: Clean Code di Robert C. Martin.
KADEM Mohammed

1
... e come fare per una convenzione di denominazione senza cadere preda dell'anti-schema di denominazione dei Puffi? devcards.io/smurf-naming-convention Tipicamente uno spazio dei nomi può fornire specificità dove necessario.
Meadock

Risposte:


150

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

Ciò significa che va benissimo avere quanto segue:

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);

63

È possibile utilizzare il metodo di estensione AsEnumerable nello spazio dei nomi Assembly System.Core e System.Linq:

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

Questo, come detto su questo collegamento MSDN, cambierà il tipo di List in fase di compilazione. Questo ti darà anche i vantaggi di enumerare solo la tua raccolta di cui avevamo bisogno (vedi l'esempio MSDN per questo).


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

1
Se non si suppone di aggiungere qualcosa alla Collection, è necessario utilizzare / return IEnumerable.
AZ_

15

Perché non usare un Single liner ...

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

11

Per quanto ne so, List<T>attrezzi IEnumerable<T>. Significa che non devi convertire o lanciare nulla.


4
Dipende. Se si tenta di impostare a IEnumerable<IList<obj>>su, IEnumerable<IEnumerable<obj>>viene visualizzato un errore del compilatore poiché il secondo non eredita dal primo.
Emaborsa

4
IEnumerable<Book> _Book_IE;
List<Book> _Book_List;

Se è la variante generica:

_Book_IE = _Book_List;

Se vuoi convertire a quello non generico:

IEnumerable ie = (IEnumerable)_Book_List;

5
Non hai bisogno del cast qui.
Jon Skeet

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

0

Devi

using System.Linq;

per utilizzare le IEnumerableopzioni a tua disposizione List.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.