我IDictionary<KeyClass, ValueClass>
在我的一个项目中使用。KeyClass
非常简单,只包含两个整数。
public class KeyClass
{
public int ValueA{get;set;}
public int ValueB{get;set;}
}
我正在从字典中访问值,如下所示:
var k = new KeyClass(1, 1);
var v = myDictionary[k];
字典肯定包含KeyClass
带有ValueA = 1
和类似的ValueB = 1
许多其他键的键。但我有例外:
The given key is not present in the dictionary.
我IComparable
在课堂上实施,KeyClass
但没有解决我的问题。我用谷歌搜索并找到了这篇CodeProject文章。它描述了使用类实现IEqualityComparer<T>
接口的以下技术。我在课堂上定义了它:
public class KeyClass
{
public int ValueA{get;set;}
public int ValueB{get;set;}
public class EqualityComparer : IEqualityComparer<KeyClass>
{
public bool Equals(KeyClass a, KeyClass b)
{
return a.ValueA == b.ValueA && a.ValueB == b.ValueB;
}
public int GetHashCode(KeyClass k)
{
return k.ValueA ^ k.ValueB;
}
}
}
现在我必须声明IDictionary<KeyClass, ValueClass>
如下:
var d = new Dictionary<KeyClass, ValueClass>(new KeyClass.EqualityComparer());
之后事情进展顺利。
我的问题是我在保存环境(.Net 4.0,Windows 7 桌面应用程序)中使用相同的类并且在另一个项目中KeyClass
没有IEqualityComparet<T>
实现,但是为什么在我将类放入这个项目后它停止工作?