2011-01-15 20 views

Respuesta

99

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

Esto significa que se puede perfectamente bien tener lo siguiente:

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

así como:

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

que podría ser invocada:

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

Si se trata de la variante genérica:

_Book_IE = _Book_List; 

Si desea convertir a la no genérica uno:

IEnumerable ie = (IEnumerable)_Book_List; 
+5

No necesita el modelo aquí. –

+2

Lo hace si quiere los métodos específicos de la interfaz no genérica, ya que algunos de ellos se implementan explícitamente, ¿o estoy en la pista incorrecta aquí? – Femaref

11

Por lo que yo sé List<T> implementa IEnumerable<T>. Significa que no tienes que convertir o lanzar nada.

+1

Depende. Si intenta establecer un 'IEnumerable >' en un 'IEnumerable >', se genera un error de compilación ya que el segundo no hereda del primero. – Emaborsa

12

por qué no usar un forro individual ...

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

Se puede utilizar el método de extensión AsEnumerable en Asamblea System.Core y System.Linq espacio de nombres:

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

Esta voluntad, como se dijo en this MSDN link cambie el tipo de la Lista en tiempo de compilación. Esto le dará los beneficios también para enumerar solo su colección que necesitamos (consulte el ejemplo de MSDN para esto).

+0

Parece simple, pero hace la forma más fácil de convertir. Gracias –

1

Necesitas

using System.Linq; 

utilizar IEnumerable opciones a su List.