栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

c# 复写Equals方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c# 复写Equals方法

应用情景:

很多标准的方法都是利用Object.Equals方法来做对比的,例如LIst.Remove

假设 某些情景下我们希望引用类型判断“相等”时不去看地址是不是同一个,而是看某些属性是不是一样就可以了。(例如身份证ID是一个就认为是同一个人)

复写方法如下范例所示:
Main{
    List nList = new List { new People( 1 ), new People( 2 ), new People( 3 ) };
	People onePeople = new People( 1 );
	nList.Remove( onePeople );

}


class People
{
	public People( int nID )
	{
		ID = nID;
	}
	int ID;

	public override bool Equals( object obj )
	{
		return Equals( obj as People );
	}

	bool Equals( People other )
	{
		return other != null 
			&& ID == other.ID;
	}

}
P.s. 最好也重新overide GetHashCode方法:

(7跟13只是常用的手法,拿質數來乘,確保hash code是獨一無二),也可以加入 ^ 计算

public override int GetHashCode()
{
    int hash =13;
    hash = (hash * 7) + ID== null ? 0 : ID.GetHashCode();
}

原因是:

1.Equal是判断是否指向同一个地址
2.每个对象都会有一个独一无二的HashCode
一旦override了Equal方法,却不override GetHashCode方法会导致两个判断为相同(利用Equal判断)的对象,Hash值却不同。
承上,在使用到HashCode的地方(例如Dictionary中的key),两个相同对象可能会被重复加入到Dictionary中

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777714.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号