Convertir de lista a formato IEnumerable

97
IEnumerable<Book> _Book_IE
List<Book> _Book_List

¿Cómo debo hacer para convertir _Book_Lista IEnumerableformato?

Qué pasa
fuente
58
Su convención de nomenclatura es lamentablemente única.
Kirk Woll
6
Al menos tiene una convención, ¿eh?
Femaref
1
Para las personas que se preguntan por qué el comentario de Kirk tiene tantas "ventajas", es porque no puedes simplemente nombrar tu variable como quieres. existen convenciones para eso, y es muy recomendable que las sigas, para que tu código sea claro y comprensible, esto ayudará a las personas que intentan ayudarte en lugares como Stack-overflow o GitHub. para más información lea el libro: Código limpio de Robert C. Martin.
KADEM Mohammed
1
... y ¿cómo llevar a cabo una convención de nomenclatura sin caer en el antipatrón Smurf Naming? devcards.io/smurf-naming-convention Normalmente, un espacio de nombres puede proporcionar especificidad donde sea necesario.
Meadock

Respuestas:

150

No es necesario convertirlo. List<T>implementa la IEnumerable<T>interfaz por lo que ya es enumerable.

Esto significa que está perfectamente bien tener lo siguiente:

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

tanto como:

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

que podría invocarse:

List<Book> books = FetchEmFromSomewhere();    
ProcessBooks(books);
Darin Dimitrov
fuente
63

Puede usar el método de extensión AsEnumerable en el espacio de nombres Assembly System.Core y System.Linq:

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

Esto, como se dice en este enlace de MSDN, cambiará el tipo de Lista en tiempo de compilación. Esto le dará los beneficios también de enumerar solo su colección que necesitábamos (vea el ejemplo de MSDN para esto).

cdie
fuente
Parece simple pero es la forma más fácil de convertir. Gracias
Ishwor Khanal
1
Si se supone que no debe agregar algo a la Colección, debe usar / devolver IEnumerable.
AZ_
15

¿Por qué no usar un solo revestimiento ...

IEnumerable<Book> _Book_IE= _Book_List as IEnumerable<Book>;
Rahul Chowdhury
fuente
11

Hasta donde yo sé List<T>implementos IEnumerable<T>. Significa que no tienes que convertir ni lanzar nada.

Elalfer
fuente
4
Depende. Si intenta establecer IEnumerable<IList<obj>>a en an IEnumerable<IEnumerable<obj>>, aparece un error de compilador ya que el segundo no hereda del primero.
Emaborsa
4
IEnumerable<Book> _Book_IE;
List<Book> _Book_List;

Si es la variante genérica:

_Book_IE = _Book_List;

Si desea convertir a uno no genérico:

IEnumerable ie = (IEnumerable)_Book_List;
Femaref
fuente
5
No necesitas el yeso aquí.
Jon Skeet
2
Lo hace si desea los métodos específicos de la interfaz no genérica, ya que algunos de ellos se implementan explícitamente, o estoy en el camino equivocado aquí?
Femaref
0

Necesitas

using System.Linq;

para usar las IEnumerableopciones en su List.

Jurado
fuente