有个我自己定义的类A
我所要实现的就是如果:A a1=new A();
a1.name="aaa";
与 A a2=new A();
a2.name="aaa";
那么,a1==a2,所以我写了下面的类!
class A
{
public string name = ""; public static bool operator !=(A a1, A a2)
{
bool flag = false;
if (a1.name != a2.name)
{
flag = true;
}
return flag;
}
public static bool operator ==(A a1, A a2)
{
bool flag = false; if (a1.name == a2.name)
{
flag = true;
}
return flag;
}
}
但是我把这个类的实例放入集合中就不行了,如下面的代码断:
Dictionary<A, string> id = new Dictionary<A, string>();
A a1 = new A();
a.name = "aaa"; A a2 = new A();
a1.name = "aaa"; id.Add(a, "aaa"); if (id.ContainsKey(a2)) //出问题的就是这个方法,明明是包含了相同的键值,但是结果显示不包含
{
MessageBox.Show("包含!");
}
else
{
MessageBox.Show("不包含!");
}
如果我把键值换成string 类型,就没有问题,不知道为什么,大家帮助看一下,我也尝试着把A类中的GetHashCode,与Equals方法,重写也不解决问题,如果按照hash表的特性,应该是比较GetHashCode 这个方法返回的值是否存在,可是这个问题还是没有解决。大家有空 帮看看
我所要实现的就是如果:A a1=new A();
a1.name="aaa";
与 A a2=new A();
a2.name="aaa";
那么,a1==a2,所以我写了下面的类!
class A
{
public string name = ""; public static bool operator !=(A a1, A a2)
{
bool flag = false;
if (a1.name != a2.name)
{
flag = true;
}
return flag;
}
public static bool operator ==(A a1, A a2)
{
bool flag = false; if (a1.name == a2.name)
{
flag = true;
}
return flag;
}
}
但是我把这个类的实例放入集合中就不行了,如下面的代码断:
Dictionary<A, string> id = new Dictionary<A, string>();
A a1 = new A();
a.name = "aaa"; A a2 = new A();
a1.name = "aaa"; id.Add(a, "aaa"); if (id.ContainsKey(a2)) //出问题的就是这个方法,明明是包含了相同的键值,但是结果显示不包含
{
MessageBox.Show("包含!");
}
else
{
MessageBox.Show("不包含!");
}
如果我把键值换成string 类型,就没有问题,不知道为什么,大家帮助看一下,我也尝试着把A类中的GetHashCode,与Equals方法,重写也不解决问题,如果按照hash表的特性,应该是比较GetHashCode 这个方法返回的值是否存在,可是这个问题还是没有解决。大家有空 帮看看
解决方案 »
- ADO.NET算不算ORM呢
- 急用!!!! C# 利用ftp将多个文件上传服务器,并能续传
- 用C#代码启用iis Active Server Pages扩展属性
- enterprise library 连接oracle 10g 的配置问题
- 哪为兄弟做过remoting 远程登陆的系统?
- 思归,孟子E章,各位高手请帮帮忙。分布式事务已完成。请将此会话登记到新事务或 NULL 事务中。还有另外一个问题。。。。。。。。。。。
- 急急急,DataGrid中模板列绑入一 Button按钮,现怎样做到点击此按钮可选中本行,且又可引发一个OnClick事件呢!!!
- 关于MSDN Library - April 2003
- 有一列字段我不想在表格控件中显示,又想操作它,怎么办?
- 如何在嵌入式资源中播放wav文件
- AudioVideoPlayback播放视频时,如何静音
- 请问 怎样把一个Form 放到另一个Form的一个Panel 中
你要重写的应该是ContainsKey()方法
楼主再试一下?string之所以可以我想是因为在这里是把string作为值类型了
只要保证GetHashCode返回的值相同的两个对象也是Equal的,就没问题啊要不把你的GetHashCode,与Equals这两个方法的代码贴上来