Konwertuj z listy do formatu IEnumerable

98
IEnumerable<Book> _Book_IE
List<Book> _Book_List

Jak mam zrobić, aby przekonwertować _Book_Listdo IEnumerableformatu?

Co tam
źródło
58
Twoja konwencja nazewnictwa jest nieszczęśliwie wyjątkowa.
Kirk Woll,
6
Przynajmniej ma konwencję, co?
Femaref
1
Dla ludzi, którzy zastanawiają się, dlaczego komentarz Kirka ma tak wiele „wzlotów”, to dlatego, że nie możesz po prostu nazwać swojej zmiennej tak, jak chcesz! istnieją na to konwencje i zdecydowanie zaleca się ich przestrzeganie, aby kod był jasny i zrozumiały, co pomoże osobom próbującym pomóc w miejscach takich jak przepełnienie stosu lub GitHub! więcej informacji znajdziesz w książce: Clean Code Roberta C. Martina.
KADEM Mohammed
1
... i jak poradzić sobie z konwencją nazewnictwa bez padania ofiarą anty-wzorca Smurf Naming? devcards.io/smurf-naming-convention Zwykle przestrzeń nazw może zapewnić specyficzność w razie potrzeby.
Meadock
Konwersja do ienumerable jest szczególnie przydatna, gdy trzeba użyć .Reverse () w wyrażeniu Linq
Zuabros

Odpowiedzi:

150

Nie musisz go konwertować. List<T>implementuje IEnumerable<T>interfejs, więc jest już wyliczalny.

Oznacza to, że dobrze jest mieć:

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

jak również:

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

które można by przywołać:

List<Book> books = FetchEmFromSomewhere();    
ProcessBooks(books);
Darin Dimitrov
źródło
64

Możesz użyć metody rozszerzenia AsEnumerable w przestrzeni nazw Assembly System.Core i System.Linq:

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

Jak wspomniano w tym łączu MSDN , spowoduje to zmianę typu listy w czasie kompilacji. Zapewni to również korzyści polegające na wyliczeniu tylko potrzebnej nam kolekcji (zobacz przykład MSDN).

cdie
źródło
Wygląda na prosty, ale najłatwiejszy sposób na konwersję. Dziękuję
Ishwor Khanal
1
Jeśli nie zamierzasz dodawać czegoś do kolekcji, powinieneś użyć / return IEnumerable.
AZ_
15

Dlaczego nie użyć pojedynczej wkładki ...

IEnumerable<Book> _Book_IE= _Book_List as IEnumerable<Book>;
Rahul Chowdhury
źródło
11

O ile wiem, List<T>narzędzia IEnumerable<T>. Oznacza to, że nie musisz niczego konwertować ani rzucać.

Elalfer
źródło
4
To zależy. Jeśli spróbujesz ustawić a IEnumerable<IList<obj>>na an IEnumerable<IEnumerable<obj>>, daje to błąd kompilatora, ponieważ druga nie dziedziczy po pierwszej.
Emaborsa
4
IEnumerable<Book> _Book_IE;
List<Book> _Book_List;

Jeśli jest to wariant ogólny:

_Book_IE = _Book_List;

Jeśli chcesz przekonwertować na nieogólny:

IEnumerable ie = (IEnumerable)_Book_List;
Femaref
źródło
5
Nie potrzebujesz tutaj obsady.
Jon Skeet,
2
Robisz, jeśli chcesz konkretnych metod z interfejsu innego niż ogólny, ponieważ niektóre z nich są jawnie zaimplementowane, czy też jestem na złej drodze?
Femaref
0

Musisz

using System.Linq;

korzystać z IEnumerableopcji w swoim List.

Jury
źródło