Konwertuj z listy do formatu IEnumerable


98
IEnumerable<Book> _Book_IE
List<Book> _Book_List

Jak mam zrobić, aby przekonwertować _Book_Listdo IEnumerableformatu?


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

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


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

11

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


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;

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.