VS2013、.Net 4.5.2。私はGetHashCodeメソッドは、それぞれの比較のために呼ばれたが等しいことはありませんされているデバッグモードで見つけていますIEqualityComparer 012zzの不思議な動作、Equals()メソッドのブレークポイントがヒットしない
public class OptionComparer : EqualityComparer<Option>
{
public override bool Equals(Option x, Option y)
{
//Check whether the objects are the same object.
if (Object.ReferenceEquals(x, y)) return true;
//Check whether the options have the same Entry value.
return x != null && y != null && x.OptionEntry.Equals(y.OptionEntry);
}
public override int GetHashCode(Option obj)
{
//Get hash code for the OptionSection field if it is not null.
int hashOptionSection = obj.OptionSection == null ? 0 : obj.OptionSection.GetHashCode();
//Get hash code for the OptionEntry field.
int hashOptionEntry = obj.OptionEntry.GetHashCode();
//Calculate the hash code for the Option.
return hashOptionSection^hashOptionEntry;
}
}
:
は、このコード
var opCollectionA = new List<Option>()
{
...some elements added here..
};
var opCollectionB = new List<Option>()
{
...some elements added here..
};
var InAandB = opCollectionA.Except(opCollectionB, new OptionComparer()).ToArray();
と、この比較演算子クラスを考えます。その結果、私の比較人は、望ましい結果を得られません。
誰でもこれを説明できますか?
TIA。
'GetHashCodeメソッド()'の目的だこと:2つのインスタンスのハッシュコードが異なる場合は、 'Equals()'を呼び出す必要はありません。別のハッシュコードはすでにインスタンスが異なることを意味しています。 –
したがって、 'GetHashCode()'が実際に等しいと思うインスタンスに対して異なる結果を返す場合、実装は間違っています。 –