2

IEqualityComparer<T>たとえば、インターフェイスがを提供することに気づきましたpublic int GetHashCode(T obj)
私はpublic int GetHashCode()別のインターフェース/クラスでより頻繁にバリアントを見てきました。なぜ入力引数で設計されているのですか?'with引数'の場合、戻り値は呼び出し元オブジェクトではなく、メソッドの引数に基づくことを理解しています。それが必要な唯一の方法は、nullオブジェクトのGetHashCodeに思えますね。
そして最後の質問:呼び出し元オブジェクト(つまり、GetHashCodeメソッドの所有者)は何である必要がありますか?

ありがとう!


UPD。正解から最も早いものを回答としてマークしました。どうもありがとう!

4

2 に答える 2

2

IEqualityComparer<T>それ自体ではなく、他のオブジェクトを比較するためです。したがって、Equals(他の2つのオブジェクトを比較する)の2つの引数と、 GetHashCode(他のオブジェクトのハッシュコードを取得する)の1つの引数が必要です。

于 2013-02-27T17:18:18.580 に答える
2

IEqualityComparerとの違いIEquatableです。

との間にも同じ違いがIComparerありIComparableます。

どちらの場合も、最初のタイプは他の何かを比較しているため、他の何かを引数として受け入れる必要があります。それぞれの2番目のタイプは、「自分」を何かと比較することです。したがって、パラメーターは常に1つ少なくなります(本質的にはthisパラメーターです)。

于 2013-02-27T17:19:01.837 に答える