505 Stimmen

Wie kann ich ein Element zu einer IEnumerable<T>-Sammlung hinzufügen?

Meine Frage als Titel oben. Zum Beispiel

IEnumerable<T> items = new T[]{new T("msg")};
items.ToList().Add(new T("msg2"));

aber es ist ja nur 1 Gegenstand drin. Können wir eine Methode haben wie items.Add(item) wie die List<T> ?

31voto

Paul van Brenk Punkte 7189

Nein, die IEnumerable unterstützt nicht das Hinzufügen von Objekten zu ihr. Die alternative Lösung ist

var myList = new List(items);
myList.Add(otherItem);

23voto

Aamol Punkte 1084

Um eine zweite Nachricht hinzuzufügen, müssen Sie -

IEnumerable<T> items = new T[]{new T("msg")};
items = items.Concat(new[] {new T("msg2")})

15voto

CXuesong Punkte 492

Ich bin nur hier, um zu sagen, dass, abgesehen von Enumerable.Concat Erweiterungsmethode, scheint es eine weitere Methode namens Enumerable.Append in .NET Core 1.1.1. Letzteres ermöglicht es Ihnen, ein einzelnes Element an eine bestehende Sequenz zu verketten. Die Antwort von Aamol kann also auch wie folgt geschrieben werden

IEnumerable<T> items = new T[]{new T("msg")};
items = items.Append(new T("msg2"));

Bitte beachten Sie jedoch, dass diese Funktion die Eingabesequenz nicht verändert, sondern nur einen Wrapper zurückgibt, der die angegebene Sequenz und das angehängte Element zusammenfügt.

10voto

Sam Harwell Punkte 94511

Sie können nicht nur keine Elemente hinzufügen, wie Sie angeben, sondern wenn Sie ein Element zu einer List<T> (oder so ziemlich jede andere nicht schreibgeschützte Sammlung), für die Sie einen Enumerator haben, wird der Enumerator ungültig gemacht (wirft InvalidOperationException von da an).

Wenn Sie die Ergebnisse einer Datenabfrage aggregieren, können Sie die Concat Erweiterungsmethode:

Edit: Ursprünglich habe ich die Union Erweiterung in dem Beispiel, was nicht ganz korrekt ist. Meine Anwendung verwendet sie ausgiebig, um sicherzustellen, dass sich überschneidende Abfragen nicht zu doppelten Ergebnissen führen.

IEnumerable<T> itemsA = ...;
IEnumerable<T> itemsB = ...;
IEnumerable<T> itemsC = ...;
return itemsA.Concat(itemsB).Concat(itemsC);

5voto

jason Punkte 227577

Andere haben bereits ausführlich erklärt, warum man keine Gegenstände zu einem IEnumerable . Ich möchte nur hinzufügen, dass Sie, wenn Sie mit der Codierung für eine Schnittstelle fortfahren möchten, die eine Sammlung darstellt, und eine Hinzufügungsmethode wünschen, den Code für ICollection o IList . Als zusätzliches Bonbon implementieren diese Schnittstellen IEnumerable .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X