0
辞書のキーとして格納されるサブクラスでIEqualityComparerを実装しようとしています。IEqualityComparerディクショナリのサブクラスを呼び出さない
次は私が
public class SuperClass : IEqualityComparer<SuperClass> {
public virtual bool Equals(SuperClass dictKeyComparerA, SuperClass dictKeyComparerB) {
throw new NotImplementedException();
}
public virtual int GetHashCode(SuperClass dictKeyComparer) {
throw new NotImplementedException();
}
}
public class SubClass : SuperClass {
private readonly string application;
public SubClass(string application) {
this.application = application;
}
public override bool Equals(SuperClass dictKeyComparerA, SuperClass dictKeyComparerB) {
throw new NotImplementedException();
}
public override int GetHashCode(SuperClass dictKeyComparer) {
throw new NotImplementedException();
}
}
と私は辞書を検索しようとするには、以下のいる持っているものです。
Dictionary<SubClass, List<string>> TestDict3 = new Dictionary<SubClass, List<string>>(new SubClass("random"));
var testKeyb = new SubClass("12345");
var testListb = new List<string>{"aaaaa"};
TestDict3.Add(testKeyb, testListb);
var testKey2b = new SubClass("12345");
var testKey3b = new SubClass("56973");
if(TestDict3.ContainsKey(testKey2b)) {
Console.WriteLine("found testKey2b");
}
else {
Console.WriteLine("did not found testKey2b");
}
if(TestDict3.ContainsKey(testKey3b)) {
Console.WriteLine("found testKey3b");
}
else {
Console.WriteLine("did not found testKey3b");
}
コードが実行されると、それはそれので、実装されていない例外を返しますオーバーライド関数の代わりにスーパークラスGetHashCode関数を呼び出しています。
問題に関するご意見はありますか?
あなたの例では、スーパークラスとサブクラスの両方が実装されていない例外をスローします –