FindAll in einer Liste von benutzerdefinierten Objekten
Frage
Nun habe ich ein Objekt namens Mamamia und in der es hat einige String-Eigenschaften. Ich habe eine Liste dieses Objekts und es mit 150 Elementen gefüllt.
Ich versuche List.FindAll zu verwenden, aber ich weiß reaaally nicht, wie es zu tun. Ich habe auf diese Weise versucht:
produto = products.FindAll(delegate(Mamamia cv) {return cv.LocalPackage.Remove(1,21) == cmbPackage.SelectedValue};
Ich weiß nicht, warum die Delegierten dort, ich habe gerade versucht, auf dem Internet von einem anderen Code zu kopieren.
Vielen Dank im Voraus!
Lösung
Der Beauftragte ist dort zu sehen, ob der Wert, den Sie testen, was Sie suchen. Der Aufruf von Remove
sieht besorgniserregend wie es obwohl der Wert des mutiert - das ist selten eine gute Sache, wenn Sie durch die Liste suchen. Ich denke, wenn es ein String ist, dann ist es nicht so schlecht, obwohl es nicht sein kann, was Sie nach ...
Was sind die Arten beteiligt sind, und was suchen Sie? Oh, und verwenden Sie C # 3 und / oder .NET 3.5? Das würde es leichter machen (auch C # 3 gegen .NET 2.0 bedeutet, dass Sie einen Lambda-Ausdruck anstelle einer anonymen Methode verwenden könnten).
Was passiert, wenn Sie den Code im Moment laufen? Wenn es nur nicht etwas zu finden, es können nur sein, weil Sie als Referenz Gleichheit testen (wenn SelectedValue
kehrt object
).
Versuchen Sie folgendes:
produto = products.FindAll(delegate(Mamamia cv) {
return cv.LocalPackage.Remove(1,21).Equals(cmbPackage.SelectedValue);
});
EDIT:
Es klingt wie Sie nur einen einzigen Wert wollen, und wenn Sie 3.5 verwenden sind .NET wäre es idiomatisch sein LINQ in erster Linie zu verwenden. Ich würde verwenden:
string selectedText = (string) cmbPackage.SelectedValue;
Mamamia item = products.FirstOrDefault
(cv => cv.LocalPackage.Remove(1,21) == selectedText);
if (item != null)
{
// Found it; otherwise item will be null
}