自定义相等比较器 (IEqualityComparer)

public class ClassA
{
	public string Id {get;set;}
}
  • 比较器
public class ClassAEqualityComparer : IEqualityComparer<ClassA>
{
	public bool Equals(ClassA x, ClassA y)
	{
		return x.Id==y.Id;
	}

	public int GetHashCode(ClassA obj)
	{
		return obj.Id.GetHashCode();
	}
}
  • 例子
var a1 = new ClassA() { Id = "1" };
var a2 = new ClassA() { Id = "1" };

# 直接使用
var comparer = new ClassAEqualityComparer();
if (comparer.Equals(a1, a2))
{

}

# 在 List 中使用
List<ClassA> lsta = new List<ClassA>();
lsta.Add(a1);
lsta.Add(a2);
var lstb = lsta.Distinct(comparer);  // 去重
lstb.Dump();

# 在 HashSet 中使用
HashSet<ClassA> hs = new HashSet<ClassA>(comparer);
hs.Add(a1);
hs.Add(a2);  // false: 添加失败
hs.Dump();

# 在 Dictionary 中使用
Dictionary<ClassA, string> dic = new Dictionary<ClassA, string>(comparer);
dic.Add(a1, "1");
dic.Add(a2, "2"); // error: 已经有相同键存在
dic.Dump();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值