Wie um zu überprüfen, ob ein Element bereits in einer ListBox
Sagen, ich habe ein view-Modell auf diese Weise definiert
public class DataVM
{
public int number { get; set; }
public string name { get; set; }
}
Dann irgendwo in meinem code, den ich will, dies zu tun, füllen DataListbox
:
List<DataVM> data = new List<DataVM>();
for (int i = 0; i < data.Count; i++)
{
if (DataListbox.Items.Contains(data[i]))
{
//do nothing
}
else
{
DataListbox.Add(data[i]);
}
}
Jedoch, diese Linie if (DataListbox.Items.Contains(data[i]))
immer false, auch wenn das Element bereits in DataListbox
und es sollte zu true ausgewertet werden. Ich verstehe nicht, warum es nicht funktioniert.
Was mache ich hier falsch und wie behebe ich es?
- Sind Sie sicher, dass
DataListbox.Items
ist eine Liste/Sammlung vonDataVM
Objekte? - Ist dies
WinForms
oderWPF
(oderSilverlight
)? - Ich bin mir sehr sicher!!!
- arbeiten mit WP8 eigentlich.
InformationsquelleAutor Nii Laryea | 2013-11-29
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Grund, warum Ihr code immer falsch ist, weil die .NET framework vergleicht die Zeiger auf den Speicher und nicht den Variablen-Inhalten standardmäßig bei der Verwendung von überprüfung auf Gleichheit von zwei Objekten.
Anstatt also mit der eingebauten Funktion Enthält, sollten Sie Durchlaufen alle Elemente der listbox und überprüfen durch den Vergleich eine einzigartige Eigenschaft, wenn das Element wurde bereits Hinzugefügt, um die listbox:
Müssten Sie etwas tun, wie dies (mit LINQ; Ersetzen Sie data[i].name und Element.Wert mit der einzigartigen Eigenschaft):
Oder durch die Verwendung von "alten" coding style:
Den Enthält Methode verwendet die Gleich Methode der Klasse geprüft wird.
In diesem Fall die DataVM - Klasse muss das überschreiben der Equals-Methode
Beim überschreiben der Gleich Methode ist für Sie notwendig, zu überschreiben auch die GetHashCode Methode
Sie cannt entsprechend Ihrer eigenen Klassen. Auch wenn die Eigenschaften sind die gleichen, die baisicaly nicht das gleiche Objekt (In deinem Fall ist es nicht die gleiche DataVM). Sein wie versuchen, passend zu Ihrem Blauen Auto mit einem ather man, baisicaly es ist die gleiche, aber die Lage unter anderem ist anders.
Versuchen Sie übereinstimmende Eigenschaften des Objekts oder schreiben Sie eine eigene Funktion. (Ich habe eine Funktion)
Kann ich leider nicht Antworten auf Vorherige Antwort, aber dies ist die version, wie es sein sollte ich glaube
es fehlte die cast...