タプルを辞書のキーとして使用したい場合は、いくつかのコードがありますが、キーが正しく認識される問題があります。 Tとキーの両方がタイプSystem.Tuple <ストリング、domain.MyClassであるタプルのEquals()がfalseを返す可能性があります
Dictionary<Tuple<string, MyClass>, MyClass> Map = new Dictionary<Tuple<string, MyClass>, MyClass>
{
{ Tuple.Create(s1, new MyClass { value = v1 }), new MyClass { value = r1 } }
}
Tuple<string, MyClass> key = Tuple.Create(s, o);
foreach (Tuple<string, MyClass> t in Map.Keys)
{
if (t.GetType() == key.GetType()
&& t.Item1.Equals(key.Item1) && t.Item2.Equals(key.Item2)
&& t.Item1.GetHashCode() == key.Item1.GetHashCode() && t.Item2.GetHashCode() == key.Item2.GetHashCode())
{
bool test2 = t.Equals(key); // False?
bool test3 = t.GetHashCode() == key.GetHashCode(); // True
}
}
- >
- IはMyClassの内のequalsメソッドを実装しているように、個々の値は、等しいと見なされるべきである - これはまた、ありますチェックされたif文
- その場合、私はtest2が真であると期待していますが、私が見つけることができるドキュメンテーションは、2つのコンポーネントが同じ型でなければならないことを示しています。equalsをオーバーライドすることによって保証されます)
Tとは何ですか?それが最も偽である可能性が高いからです。 Tが参照型の場合、参照型はメンバではなく参照を比較している可能性が高く、この場合、Tがまったく同じインスタンスでない限りFalseを返します。 – Bauss
もしそれを再現することができれば助けが容易になるでしょう...あなたは[mcve]を提供できますか? –
'T'がクラスである場合、あなたの型' T'が 'object.Equals'の適合性をオーバーライドしない限り、同じ*プロパティ*を持つ2つのインスタンスは等しくありません(' Equals'はfalseを返します)。 – HimBromBeere