Von Liste in IEnumerable-Format konvertieren

97
IEnumerable<Book> _Book_IE
List<Book> _Book_List

Wie soll ich vorgehen, um _Book_Listins IEnumerableFormat zu konvertieren ?

Was geht
quelle
58
Ihre Namenskonvention ist leider einzigartig.
Kirk Woll
6
Zumindest hat er eine Konvention, oder?
Femaref
1
Für Leute, die sich fragen, warum Kirks Kommentar so viele "Höhen" hat, liegt es daran, dass Sie Ihre Variable nicht einfach so benennen können, wie Sie es möchten! Dafür gibt es Konventionen, und es wird dringend empfohlen, diese zu befolgen, damit Ihr Code klar und verständlich ist. Dies hilft den Leuten, die versuchen, Ihnen an Orten wie Stack-Overflow oder GitHub zu helfen! Weitere Informationen finden Sie im Buch: Clean Code von Robert C. Martin.
KADEM Mohammed
1
... und wie man eine Namenskonvention durchführt, ohne dem Anti-Muster "Schlumpf-Benennung" zum Opfer zu fallen? devcards.io/smurf-naming-convention Normalerweise kann ein Namespace bei Bedarf Spezifität bereitstellen.
Meadock

Antworten:

150

Sie müssen es nicht konvertieren. List<T>implementiert die IEnumerable<T>Schnittstelle so, dass sie bereits aufzählbar ist.

Dies bedeutet, dass es vollkommen in Ordnung ist, Folgendes zu haben:

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

ebenso gut wie:

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

was aufgerufen werden könnte:

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

Sie können die Erweiterungsmethode AsEnumerable im Assembly System.Core- und System.Linq-Namespace verwenden:

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

Dies ändert , wie auf diesem MSDN-Link erwähnt , den Typ der Liste in der Kompilierungszeit. Dies bietet Ihnen den Vorteil, dass Sie nur Ihre benötigte Sammlung auflisten können (siehe MSDN-Beispiel hierfür).

cdie
quelle
Sieht einfach aus, ist aber am einfachsten zu konvertieren. Vielen Dank
Ishwor Khanal
1
Wenn Sie der Sammlung nichts hinzufügen möchten, sollten Sie IEnumerable verwenden / zurückgeben.
AZ_
15

Warum nicht einen Single Liner verwenden ...

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

Soweit ich weiß, List<T>implementiert IEnumerable<T>. Es bedeutet, dass Sie nichts konvertieren oder wirken müssen.

Elalfer
quelle
4
Es hängt davon ab, ob. Wenn Sie versuchen, a auf a IEnumerable<IList<obj>>zu setzen IEnumerable<IEnumerable<obj>>, wird ein Compilerfehler ausgegeben, da der zweite nicht vom ersten erbt.
Emaborsa
4
IEnumerable<Book> _Book_IE;
List<Book> _Book_List;

Wenn es die generische Variante ist:

_Book_IE = _Book_List;

Wenn Sie in die nicht generische konvertieren möchten:

IEnumerable ie = (IEnumerable)_Book_List;
Femaref
quelle
5
Du brauchst die Besetzung hier nicht.
Jon Skeet
2
Sie tun dies, wenn Sie die spezifischen Methoden von der nicht generischen Schnittstelle möchten, da einige davon explizit implementiert sind, oder bin ich hier auf dem falschen Weg?
Femaref
0

Du brauchst

using System.Linq;

um IEnumerableOptionen bei Ihrem zu verwenden List.

Jury
quelle