私は主に、私はこのような何かを持って、辞書のキーとしてカスタムオブジェクトを使用したい:使用カスタムオブジェクトとして辞書のキー
class Tuple<A, B> : IEquatable<Tuple<A,B>>
{
public A AValue { get; set; }
public B BValue { get; set; }
public Tuple(A a, B b){ AValue = a; BValue = b; }
public bool Equals(Tuple<A, B> tuple)
{
return tuple.AValue.Equals(AValue) && tuple.BValue.Equals(BValue);
}
public bool Equals(object o)
{
return this.Equals(o as Tuple<A,B>);
}
}
(私はそう、私はタプルを持っていない.NET 4.0を使用することはできません)
私はこのようなことをします。
var boolmap = new Dictionary<Tuple<bool, bool>, string>();
boolmap.Add(new Tuple<bool,bool>(true, true), "A");
boolmap.Add(new Tuple<bool,bool>(true, false), "B");
boolmap.Add(new Tuple<bool,bool>(false, true), "C");
boolmap.Add(new Tuple<bool,bool>(false, false), "D");
var str = boolmap[new Tuple<bool,bool>(true, false)];
最後の行にKeyNotFound例外が発生します。どうしてこれなの ?私はIEquatableを実装するだけで十分ですか?あなたはEqualsメソッドをオーバーライドするときGetHashCode
をオーバーライドする必要が
おかげ
getハッシュコードの実装はどこですか?あなたがあなたのパースを平等にするならば、常にハッシュコードを取得するべきです – Manatherin
あなたのコードはあなたに警告を出します。その警告を修正すると別の警告が表示され、修正するとコードが機能します。警告を無視しないでください。 –
あなたは見たことがあります:[オブジェクトを使用して汎用辞書としてキーをネットで](http:// stackoverflow。com/questions/634826/generic-dictionary-key-in-netとしてオブジェクトを使用する) – nawfal