ArrayList mit LINQ auslesen
-
Kann man eine ArrayList auch mit der Erweiterungssyntax auslesen? Bei einem Array schreibe ich immer:
var person = quelle.Where(p => p.Name.Length > 3).Select(p => new { p.Name });
geht das bei einer ArrayList vielleicht nur über eine from-Angabe?
var person = from Person p in QuelleList where p.Name.Length > 3 select p.Name;
Die Klasse Person besteht nur aus einem String name und einem int Alter
-
Hallo,
wenn du die Wahl hast, ersetze die ArrayList durch ne entsprechende List<T>. ArrayList ist schon seit .Net 2.0 deprecated.
Ansonsten funktioniert erstes nicht, da die ArrayList untypisiert ist und nur objects enthält. Da muss man casten. Das machst du ja im zweiten Statement (was eigentlich genau das gleiche ist wie der erste Ausdruck, nur in Query Syntax).
-
AngelaMerkel schrieb:
Bei einem Array schreibe ich immer:
Nein das liefert ein IEnumerable<>.
ArrayList hat einen Konstruktor, der ICollection erwartet. Arrays implementieren das Interface:
AngelaMerkel schrieb:
var person = quelle.Where(p => p.Name.Length > 3).Select(p => new { p.Name })[b].ToArray()[/b]; var a = new ArrayList(person);
Verzichte besser auf ArrayList wenn List<T> zur Verfügung steht.
Edit:
Ich glaube ich habe das Problem falsch verstanden. Ich dachte Du wolltest das Ergebniss eines LINQ-Ausdrucks in eine ArrayList schreiben. Aber Du willst umgekehrt einen LINQ-Ausdruck auf eine ArrayList anwenden, oder?
Dann verwende einfach .OfType<>()ArrayList a = new ArrayList(Enumerable.Range(0, 10).ToArray()); var x = a.OfType<int>().Where(i => i > 5);
-
µ schrieb:
Aber Du willst umgekehrt einen LINQ-Ausdruck auf eine ArrayList anwenden, oder?
Dann verwende einfach .OfType<>()ArrayList a = new ArrayList(Enumerable.Range(0, 10).ToArray()); var x = a.OfType<int>().Where(i => i > 5);
Oder .Cast<>()
OfType filtert, d.h. Objekte die sich nicht casten lassen kommen nicht in die Ausgabe; Cast würde in dem Fall eine Exception werfen. Letzteres scheint mir das natürliche Verhalten zu sein, also würde ich OfType nur benutzen, wenn ich das genau so haben will.