Converter da lista para o formato IEnumerable

97
IEnumerable<Book> _Book_IE
List<Book> _Book_List

Como devo fazer para converter _Book_Listem IEnumerableformato?

E aí
fonte
58
Sua convenção de nomenclatura é infelizmente única.
Kirk Woll de
6
Pelo menos ele tem uma convenção, hein?
Femaref de
1
Para as pessoas se perguntando por que o comentário de Kirk tem tantos "ups", é porque você não pode simplesmente nomear sua variável da maneira que deseja! existem convenções para isso, e é altamente recomendado que você as siga, para que seu código seja claro e compreensível, isso ajudará as pessoas que tentam ajudá-lo em lugares como Stack-overflow ou GitHub! para mais informações, leia o livro: Clean Code, de Robert C. Martin.
KADEM Mohammed
1
... e como fazer uma convenção de nomenclatura sem cair no anti-padrão de Nomenclatura Smurf? devcards.io/smurf-naming-convention Normalmente, um namespace pode fornecer especificidade quando necessário.
Meadock

Respostas:

150

Você não precisa convertê-lo. List<T>implementa a IEnumerable<T>interface, portanto, já é um enumerável.

Isso significa que é perfeitamente normal ter o seguinte:

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

assim como:

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

que pode ser invocado:

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

Você pode usar o método de extensão AsEnumerable no namespace Assembly System.Core e System.Linq:

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

Isso irá, como dito neste link do MSDN, alterar o tipo da Lista em tempo de compilação. Isso lhe dará os benefícios de enumerar apenas a coleção de que precisamos (consulte o exemplo do MSDN para isso).

cdie
fonte
Parece simples, mas é a maneira mais fácil de converter. Obrigado
Ishwor Khanal
1
Se você não deve adicionar algo à Coleção, deve usar / retornar IEnumerable.
AZ_
15

Por que não usar um único liner ...

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

Tanto quanto eu sei, List<T>implementos IEnumerable<T>. Isso significa que você não precisa converter ou lançar nada.

Elalfer
fonte
4
Depende. Se você tentar definir a IEnumerable<IList<obj>>como an IEnumerable<IEnumerable<obj>>, ocorrerá um erro do compilador, pois o segundo não herda do primeiro.
Emaboursa
4
IEnumerable<Book> _Book_IE;
List<Book> _Book_List;

Se for a variante genérica:

_Book_IE = _Book_List;

Se você deseja converter para um não genérico:

IEnumerable ie = (IEnumerable)_Book_List;
Femaref
fonte
5
Você não precisa do elenco aqui.
Jon Skeet de
2
Sim, se quiser os métodos específicos da interface não genérica, já que alguns deles são explicitamente implementados, ou estou no caminho errado aqui?
Femaref de
0

Você precisa

using System.Linq;

para usar IEnumerableopções em seu List.

Júri
fonte