私はCity
という名前のカスタムクラスを持ち、このクラスはEquals
メソッドを持っています。 SequenceEqual
メソッドは、配列を割り当てられた変数と比較するときに有効です。この問題は、new City()
という形式の要素を含む2つの配列を比較するときに発生します。それは偽となります。C#でカスタムクラス配列の等価性をチェックする方法は?
シティクラス:以下Test
方法において
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;
}
}
、第1比較結果arrayCompare1
はtrue
であり、第2の結果arrayCompare2
はfalse
あります。どちらの比較結果も真でなければならないが、異常な発言がある。この問題を解決するにはどうすればよいですか?
テストコード:
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);
}
この状態は役に立たない 'this == null' – CodeNotFound
応答@CodeNotFoundに感謝します。あなたが正しい。 –