在C#的容器中,常用的三个容器数组,ArrayList,Hashtable..数组比较简单,实现某种单一数据的存储,但是并不能自由插入,移除和容纳不同的对象..,所以ArrayList是数组的替代品,并且由于ArrayList可以自由的添加,删除,插入,读取,给我们提供了足够大的自由性,颇得我的青睐..不过使用中,难免有些缺点,感觉最麻烦的就是检测某对象是否在Items中..因为每一个new出来的Class在内存中的表现不相同,即便是同一个类,你new出来两个,然后再判断,也是会一样的!!所以每次使用ArrayList.Contains()检测对象的时候,难免都得不到自己想要的结果..因为每个Class都是继承自Object类..而ArrayList.Contains()的实现是IList.Contains,而此方法是调用Class中的Equals方法判断是否相等,这个时候,可以在自己的对象中覆写Object.Equals方法,以达到自己的目的..注意,如果你覆写了Equals方法,则也要覆写GetHashCode(),因为Equals是用获取Object.GetHashCode()来做判断的.看看下面的代码就明白:
1
using
System;
2![](https://i-blog.csdnimg.cn/blog_migrate/4e1327d7af334cad65c1427adea353cd.gif)
3
namespace
HashCode_Test
4![](https://i-blog.csdnimg.cn/blog_migrate/8d03897435b518ed5db28576e03b5125.gif)
{
5![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
/**//// <summary>
6
/// 给你的类加入Equals,测试类
7
/// </summary>
8
public class Class2
9![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/16f000f38e08a0bc0ae390588264bdea.gif)
{
10
int myHashCode = 0;
11
public Class2( int id ) //传递进一个int,作为GetHashCode的值
12![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
{
13
myHashCode = id;
14
}
15
16
//覆写GetHashCode,关键的一步
17
public override int GetHashCode()
18![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
{
19
return myHashCode;
20
}
21
22
//这步,可有可无,主要是做测试结果用的
23
public override string ToString()
24![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
{
25
return DateTime.Now.ToString();
26
}
27
28![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
/**//// <summary>
29
/// 重载了Equals方法,这步和GetHashCode配合起来才会有效果
30
/// </summary>
31
/// <param name="o">要检测的对象</param>
32
/// <returns>返回是否相同</returns>
33
public override bool Equals( object o )
34![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
{
35
return o.GetHashCode() == myHashCode;
36
}
37![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
38
//在这里使用运算符重载,主要是为了进一步演示Equals
39
public static bool operator ==(object c1, Class2 c2)
40![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
{
41
return c1.GetHashCode().Equals( c2.GetHashCode() );
42
}
43
44
//当你重载了==运算符后,必须要重载!=运算符
45
public static bool operator !=(object c1, Class2 c2)
46![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
{
47
return c1.GetHashCode().Equals( c2.GetHashCode() );
48
}
49
50
}
51
}
![](https://i-blog.csdnimg.cn/blog_migrate/4e1327d7af334cad65c1427adea353cd.gif)
2
![](https://i-blog.csdnimg.cn/blog_migrate/4e1327d7af334cad65c1427adea353cd.gif)
3
![](https://i-blog.csdnimg.cn/blog_migrate/4e1327d7af334cad65c1427adea353cd.gif)
4
![](https://i-blog.csdnimg.cn/blog_migrate/8d03897435b518ed5db28576e03b5125.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/19263368385aec3430f264673fed7d3e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
5
![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/16f000f38e08a0bc0ae390588264bdea.gif)
6
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
7
![](https://i-blog.csdnimg.cn/blog_migrate/99b4bbe28c013fe678934cbfc7336572.gif)
8
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
9
![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/16f000f38e08a0bc0ae390588264bdea.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
10
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
11
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
12
![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/16f000f38e08a0bc0ae390588264bdea.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
13
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
14
![](https://i-blog.csdnimg.cn/blog_migrate/99b4bbe28c013fe678934cbfc7336572.gif)
15
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
16
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
17
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
18
![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/16f000f38e08a0bc0ae390588264bdea.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
19
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
20
![](https://i-blog.csdnimg.cn/blog_migrate/99b4bbe28c013fe678934cbfc7336572.gif)
21
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
22
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
23
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
24
![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/16f000f38e08a0bc0ae390588264bdea.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
25
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
26
![](https://i-blog.csdnimg.cn/blog_migrate/99b4bbe28c013fe678934cbfc7336572.gif)
27
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
28
![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/16f000f38e08a0bc0ae390588264bdea.gif)
29
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
30
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
31
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
32
![](https://i-blog.csdnimg.cn/blog_migrate/99b4bbe28c013fe678934cbfc7336572.gif)
33
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
34
![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/16f000f38e08a0bc0ae390588264bdea.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
35
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
36
![](https://i-blog.csdnimg.cn/blog_migrate/99b4bbe28c013fe678934cbfc7336572.gif)
37
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
38
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
39
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
40
![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/16f000f38e08a0bc0ae390588264bdea.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
41
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
42
![](https://i-blog.csdnimg.cn/blog_migrate/99b4bbe28c013fe678934cbfc7336572.gif)
43
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
44
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
45
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
46
![](https://i-blog.csdnimg.cn/blog_migrate/ec04878ae50ae0c605bd560ad5491b5a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/16f000f38e08a0bc0ae390588264bdea.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
47
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
48
![](https://i-blog.csdnimg.cn/blog_migrate/99b4bbe28c013fe678934cbfc7336572.gif)
49
![](https://i-blog.csdnimg.cn/blog_migrate/ec521a53508a260e7a7f3881e8be22e6.gif)
50
![](https://i-blog.csdnimg.cn/blog_migrate/99b4bbe28c013fe678934cbfc7336572.gif)
51
![](https://i-blog.csdnimg.cn/blog_migrate/74b57f636ee0b2ad42f765ed1d312e27.gif)
这里是测试代码: