Ich habe zwei Instanzen von IEnumerable<T>
(mit dem gleichen T
). Ich möchte eine neue Instanz, von IEnumerable<T>
der beide verkettet sind.
Gibt es eine integrierte Methode in .Net, um dies zu tun, oder muss ich sie selbst schreiben?
c#
.net
ienumerable
concatenation
Samuel Rossille
quelle
quelle
Antworten:
Ja, LINQ to Objects unterstützt dies mit
Enumerable.Concat
:NB: Sollte
first
odersecond
sollte null sein, würden Sie eine erhaltenArgumentNullException
. Um dies zu vermeiden und Nullen wie eine leere Menge zu behandeln, verwenden Sie den Null-Koaleszenzoperator wie folgt:quelle
using System.Linq
Namespace oben in der Codedatei zu importieren , um die gewünschte Erweiterungsmethode in der IDE Intellisense anzuzeigen.Die
Concat
Methode gibt ein Objekt zurück, das implementiert wird,IEnumerable<T>
indem ein Objekt zurückgegeben wird (nennen Sie es Cat), dessen Enumerator versucht, die beiden übergebenen aufzählbaren Elemente (nennen Sie sie A und B) nacheinander zu verwenden. Wenn die übergebenen Aufzählungen Sequenzen darstellen, die sich während der Lebensdauer von Cat nicht ändern und aus denen ohne Nebenwirkungen abgelesen werden kann, kann Cat direkt verwendet werden. Andernfalls kann es eine gute Idee zu nennen sein ,ToList()
aufCat
und verwenden Sie das ErgebnisList<T>
(die eine Momentaufnahme der Inhalte von A und B wird).Einige Aufzählungen erstellen zu Beginn der Aufzählung einen Snapshot und geben Daten aus diesem Snapshot zurück, wenn die Auflistung während der Aufzählung geändert wird. Wenn B eine solche Aufzählung ist, wird jede Änderung an B, die auftritt, bevor Cat das Ende von A erreicht hat, in der Aufzählung von Cat angezeigt, Änderungen, die danach auftreten, jedoch nicht. Eine solche Semantik kann wahrscheinlich verwirrend sein; Wenn Sie einen Schnappschuss von Cat machen, können Sie solche Probleme vermeiden.
quelle
Sie können den folgenden Code für Ihre Lösung verwenden: -
quelle
quelle