Ich habe eine Klasse "Class1", die eine Zeichenfolgenvariable "sText" in .NET 2.0 hat. Ich habe eine Liste von Objekten dieser Klasse "lstClass1" erstellt. Es speichert viele Objekte dieser Klasse nach dem Setzen der String-Variablen.List.Contains schlägt auf Objektvergleich fehl
komplette Code ist:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (!lstClass1.Contains(new Class1("text1")))
lstClass1.Add(new Class1("text1"));
}
public List<Class1> lstClass1 = new List<Class1>();
}
public class Class1
{
public Class1(string sText)
{
this.sText = sText;
}
public string sText = "";
}
Nun, das Problem ist, dass ich nur Klassenobjekte hinzufügen möchten, die Zeichenfolge mit eindeutigen Textwert hat. Wenn beispielsweise lstClass1 bereits ein Objekt mit dem Zeichenfolgenvariablenwert "text1" enthält, sollte das Hinzufügen eines Objekts, das auch "text1" enthält, nicht zulässig sein. So schrieb ich Code:
if (!lstClass1.Contains(new Class1("text1")))
lstClass1.Add(new Class1("text1"));
Aber es erlaubt immer der Text „text1“ noch hinzugefügt werden, wenn es bereits ein Objekt in der Liste mit „text1“ string. Meine Annahme war, dass beim ersten Buttonklick-Ereignis "button1_Click" das Objekt hinzugefügt wird, da die Liste leer ist, aber beim nächsten Klick auf die List.Contains-Funktion prüft, ob sich bereits ein Objekt in der Liste mit der String-Variablen "text1" befindet Wenn es gefunden wird, wird es nicht hinzugefügt. Aber es erlaubt immer ein Objekt mit dem Text "text1" hinzuzufügen, auch wenn es bereits in der Liste vorhanden ist.
Bitte beachten Sie: Ich habe keine einfache Liste von Zeichenketten oder einer Zeichenkette genommen, weil ich mein großes Problem von Liste, Klassen und Objekten auf einfache Weise erklären möchte.
Bitte helfen.
Haben Sie eine Implementierung der standardmäßigen Equals- und GetHashCode-Methoden von Class1 bereitgestellt? – Oscar
http://stackoverflow.com/questions/10454519/best-way-to-compare-two-complex-object – k06a
Nicht sicher, warum Sie diese 'neue Class1 (" text1 ")' nicht in einer neuen 'Class1 speichern '-typische Variable, BTW. Es gibt keine Notwendigkeit, es zweimal zu konstruieren. Einfach einmal konstruieren, auf die Variable prüfen und dann aus der Variablen speichern. – Nyerguds