Convertir de lista a formato IEnumerable


97
IEnumerable<Book> _Book_IE
List<Book> _Book_List

¿Cómo debo hacer para convertir _Book_Lista IEnumerableformato?


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

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


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

11

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


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;

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.