IEnumerable - eine Art Liste und wie Elemente hinzufügen?

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    IEnumerable - eine Art Liste und wie Elemente hinzufügen?

    Moin!

    schon mehrfach bin ich über den Begriff "IEnumerable" gestolpert. Aber diesmal komme ich wohl nicht darum ..

    Es gibt da nämlich bei einer Funktion den Parameter Features As IEnumerable (Of SimpleFeature)

    Wollte Elemente hinzufügen - aber ein Add habe ich nicht gefunden.

    Auch was ich so im Web als Beschreibung gefunden habe verstehe ich leider gar nicht. Ich dachte immer das ist eine Art Liste.

    Kann mich jemand aufklären?

    Gruß Jan
    Nein, IEnumerable ist ein Interface. Also nur eine Auflistung von Prozeduren/Methoden/Fähigkeiten, welche eine andere Klasse haben soll. Eine Art Vertrag. Man könnte sagen: Wenn eine Klasse die Schnittstelle IEnumerable implementiert, also all die genannten Fähigkeiten der Schnittstelle aufweist und auch klar sagt, was dann passieren soll, kann sie als IEnumerable angesprochen werden. Das ist als ob jemand sagt: Hey, ich brauche jemanden, den ich Mädchen-für-alles nenne. Dieser muss können:
    • mich zum Flughafen fahren
    • meine Kinder versorgen
    • meine eMails von Spam befreien
    Wie derjenige, der diese Anforderungen erfüllt, diese Aufgaben im Detail bewältigt, ist egal. Nur wenn er eben das alles kann, darf er sich Mädchen-für-alles nennen.
    Und so ist es mit IEnumerable. Es ist erstmal nur eine Auflistung von Fähigkeiten, die eine Klasse erfüllen muss. Aber diese Fähigkeiten-Auflistung kann man nicht als Objekt hernehmen. Eine List(Of Integer) hingegen (als Beispiel) implementiert die IEnumerable(Of Integer)-Schnittstelle, hat also hinterlegt, wie eben durch die einzelnen Elemente einer Aufeinanderreihung von Elementen/Zahlen vorgegangen werden soll. Sie hat auch eine Add-Methode, um Elemente hinzuzufügen. Aber die gehört (m.E.) nicht mehr zum Anforderungskatalog von IEnumerable. Du kannst Dir auch eine eigene Klasse bauen, die IEnumerable implementiert. Mit Logik musst Du sie aber selber füllen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Eine Auflistung von Elementen die IEnumerable Implementiert, kann mithilfe von foreach durchlaufen werden. Das ist z.B. bei Arrays als auch Listen bereits gegeben.

    Dazu kommt, dass ein Typ, der IEnumerable Implementiert, auch die Extension-Methoden aus dem System.Linq Namespace erhält, also .OrderBy, .Where, usw.
    @jan99 Es ist z.B. möglich, eine Parent-Class als IEnumerable zu implementieren, die dann per For Each über ein Child-Member iteriert.
    Dazu müssen die IEnumerable-Items implementiert werden.
    Gugst Du csharp411.com/c-empty-enumerator/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    jan99 schrieb:

    Es gibt da nämlich bei einer Funktion den Parameter Features As IEnumerable (Of SimpleFeature)
    Dieser Funktion kannste getrost eine List(Of SimpleFeature) übergeben.
    Weil List(Of SimpleFeature) implementiert IEnumerable (Of SimpleFeature)
    Ebenso kannste ihr ein SimpleFeature-Array übergeben, weil SimpleFeature-Array implementiert ebenfalls IEnumerable (Of SimpleFeature)
    Auch kannste der Methode ein Hashset(Of SimpleFeature) übergeben, oder einen Stack(Of SimpleFeature), oder...
    Es gibt also viele Klassen, die IEnumerable (Of SimpleFeature) implementieren, und die genannte Funktion ist sehr flexibel mit ihrem Parameter Features As IEnumerable (Of SimpleFeature), der all diese verschiedenen Klassen akzeptiert - wenn sie nur IEnumerable (Of SimpleFeature) implementieren.