摘要:本文将带你了解C#编程之相等比较器的使用,希望本文对大家学C#/.Net有所帮助。对数组或集合中的对象进行比较,在对数组和集合的使用中,我们通常要在添加数据之前先确定该数组或集合中是否已经有相同的数据,以保持数组或集合中数据的唯一。对于普通类型的数组来说,我们只需要使用扩展方法Contains就可以判断数组中是否包含某个元素。
string[] str = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9"};
Console.WriteLine("普通数组比较:{0}",str.Contains("6"));
上面代码返回的结果是为True。
但上面只是普通类型的判断,如果数组中存储的是一个对象(也就是集合),而不是普通类型的数据,那直接使用Contains方法就无法判断了。
有一个对象Person:
public class Person
{
public string UserName { get; set; }
public Person(string username)
{
this.UserName = username;
}
}
创建一个Person对象的集合,并向其中添加多个对象:
List<Person> list = new List<Person>();
Person p1 = new Person("石昊");list.Add(p1);
Person p2 = new Person("楚阳");list.Add(p2);
Person p3 = new Person("纪宁");list.Add(p3);
Person p4 = new Person("叶凡");list.Add(p4);
Person p5 = new Person("辰南");list.Add(p5);
Person p6 = new Person("石昊");
bool result1 = list.Contains(p6);
Console.WriteLine("直接比较:{0}", result1);
以上程序得到的结果是False,因为使用集合的Contains方法是对两个对象进行比较,这两个对象虽然UserName相同,但并不是同一个对象。
那我要怎么检测出集合中已经有了一个名为“石昊”的Person呢?
首先,我们会发现,Contains方法并不是一个只有一个参数的方法,它还有另外两个重载的方法。如下图:
在最后一个重载方法中,我们可以看到,它需要一个相等比较器,其类型是IEqualityComparer<TSource>类型,其中的TSource就是进行比较的数据类型。
这个比较器是一个对象,我们可以针对Person类型创建一个比较器对象的类型:
public class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.UserName == y.UserName;
}
public int GetHashCode(Person obj)
{
return base.GetHashCode();
}
}
这个比较器类型需要实现IEqualityComparer<TSource>接口,在Equals方法中对两个对象的UserName字段进行比较。
这样,我们再来把list中的对象与p6对象进行比较:
bool result2 = list.Contains(p6, new PersonComparer());
Console.WriteLine("加比较器:{0}", result2);
打印出来的结果是为True。
以上就介绍了C#.NET的相关知识,希望对C#.NET有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言C#.NET频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号