Ich habe eine benutzerdefinierte Klasse mit dem Namen City
und diese Klasse hat eine Equals
Methode. Die SequenceEqual
-Methode funktioniert gut, wenn Arrays mit zugewiesenen Variablen verglichen werden. Das Problem tritt auf, wenn zwei Arrays verglichen werden, die die Elemente new City()
formatiert enthalten. Es ergibt sich als falsch.Wie überprüft man die Gleichheit für ein benutzerdefiniertes Klassen-Array in C#?
Stadt Klasse:
interface IGene : IEquatable<IGene>
{
string Name { get; set; }
int Index { get; set; }
}
class City : IGene
{
string name;
int index;
public City(string name, int index)
{
this.name = name;
this.index = index;
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public int Index
{
get
{
return index;
}
set
{
index = value;
}
}
public bool Equals(IGene other)
{
if (other == null && this == null)
return true;
if((other is City))
{
City c = other as City;
return c.Name == this.Name && c.Index == this.Index;
}
return false;
}
}
In Test
Methode unten, das erste Ergebnis zu vergleichen arrayCompare1
true
ist und das zweite Ergebnis ist arrayCompare2
false
. Beide Vergleichsergebnisse müssen wahr sein, aber es gibt eine anormale Untersuchung. Wie kann ich dieses Problem beheben?
Prüfregeln:
public void Test()
{
City c1 = new City("A", 1);
City c2 = new City("B", 2);
City[] arr1 = new City[] { c1, c2 };
City[] arr2 = new City[] { c1, c2 };
City[] arr3 = new City[] { new City("A", 1), new City("B", 2) };
City[] arr4 = new City[] { new City("A", 1), new City("B", 2) };
bool arrayCompare1 = arr1.SequenceEqual(arr2);
bool arrayCompare2 = arr3.SequenceEqual(arr4);
MessageBox.Show(arrayCompare1 + " " + arrayCompare2);
}
diese Bedingung ist nutzlos, 'das == null' – CodeNotFound
Vielen Dank für die Antwort @CodeNotFound. Du hast recht. –