Ich habe eine Klasse, die implementiert IEnumerable
, aber nicht implementiert IEnumerable<T>
. Ich kann diese Klasse nicht ändern und stattdessen keine andere Klasse verwenden. Wie ich aus MSDN verstanden habe, kann LINQ verwendet werden, wenn Klassen implementiert werdenIEnumerable<T>
. Ich habe es versucht instance.ToQueryable()
, aber es aktiviert immer noch keine LINQ-Methoden. Ich weiß mit Sicherheit, dass diese Klasse nur Instanzen eines Typs enthalten kann, sodass die Klasse sie implementieren kann IEnumerable<T>
, aber dies ist einfach nicht der Fall. Was kann ich also tun, um diese Klasse mit LINQ-Ausdrücken abzufragen?
.net
linq
ienumerable
Bogdan Verbenets
quelle
quelle
Antworten:
Sie können eine generische Version einer IEnumerable verwenden
Cast<T>()
oderOfType<T>
abrufen, die LINQ vollständig unterstützt.Z.B.
Oder wenn Sie nicht wissen, welchen Typ es enthält, können Sie immer Folgendes tun:
Wenn Ihr Nicht-Generikum
IEnumerable
Objekte verschiedener Typen enthält und Sie nur an z. die Zeichenfolgen, die Sie tun können:quelle
Ja, kann es. Sie müssen nur die
Cast<T>
Funktion verwenden, um sie in eine Eingabe umzuwandelnIEnumerable<T>
. Beispielsweise:Jetzt
e2
ist einIEnumerable<T>
und kann mit allen LINQ-Funktionen arbeiten.quelle
Sie können auch die Syntax des Abfrageverständnisses von LINQ verwenden, die in den Typ der Bereichsvariablen (
item
in diesem Beispiel) umgewandelt wird, wenn ein Typ angegeben wird:Der Effekt ist identisch mit der Lösung von @ JaredPar. Weitere Informationen finden Sie unter 7.16.2.2: Explizite Bereichsvariablentypen in der C # -Sprachenspezifikation.
quelle