有没有办法使用等效键检索字典键?

时间:2014-04-15 14:37:32

标签: c# .net

我使用自定义类作为Dictionary(TKey,TValue)的键。该类重写GetHashCode和Equals等。

我希望能够做的是添加键/值对;稍后,生成一个等同于第一个键的新键(相同的哈希码,Equals返回true),并使用此等效键不仅检索值,还检索对原始的引用首先添加到词典中的键。

示例:

var keyA = new KeyClass("abc123");
var keyB = new KeyClass("abc123"); // same as far as dictionary is concerned

var dict = new Dictionary<KeyClass, Object>();

dict.Add(keyA, value);

现在如何使用keyB从Dictionary中获取对keyA的引用?

在没有枚举Keys集合的情况下,这似乎很容易做到,因为Dictionary已经对这些键进行了哈希处理,但是我无法找到Dictionary类中内置的任何内容。我错过了什么吗?现在,我要么必须使用双向字典并进行反向查找,或者(在这种情况下我的偏好)&#34;增强&#34; I类用于表示值,因此它们存储对原始键的引用。

1 个答案:

答案 0 :(得分:1)

嗯,@ AD.Net是适当的答案,在覆盖GetHashCode()Equals()

时大多是正确的
public class KeyClass 
{

   public readonly string key;

   public KeyClass(string key)
   {
      this.key = key;
   }

   public override bool Equals(object other)
   {
       if (other == null)
         return false;

       // Casting object other to type KeyClass
       KeyClass obj = other as KeyClass;
       if (obj == null)
         return false;

        return this.key == other.key;
   }

   public override int GetHashCode()
   {
        return this.key.GetHashCode();
   }
}