IEqualityComparer<T>接口

IEqualityComparer<T>接口的对象的主要作用在于自定义判断两个对象是否相等。

其中最常用的方法: bool Equals(T x, T y);

实现该方法用于比较两个对象是否相等。如果指定的对象相等,则为 true;否则为 false。

代码示例:

    class Program
    {
        static void Main(string[] args)
        {
            People p1 = new People(1, "刘备", 23);
            People p2 = new People(1, "关羽", 22);
            People p3 = new People(1, "张飞", 21);
            List<People> listP1 = new List<People>();
            listP1.Add(p1);
            listP1.Add(p2);
            listP1.Add(p3);

            People p4 = new People(2, "赵云", 23);
            People p5 = new People(2, "黄忠", 22);
            People p6 = new People(2, "马超", 21);
            List<People> listP2 = new List<People>();
            listP2.Add(p4);
            listP2.Add(p5);
            listP2.Add(p6);

            Comparers c = new Comparers();
            bool b = listP1.SequenceEqual(listP2, c);   //只要集合中的对象年龄相等就视对象为相等
            Console.WriteLine(b);   //输出 True

            Console.ReadKey();
        }
    }

    public class Comparers : IEqualityComparer<People>
    {

        public bool Equals(People p1, People p2)
        {
            if (p1.Age == p2.Age)
            {
                return true;
            }
            return false;
        }

        public int GetHashCode(People obj)
        {
            throw new NotImplementedException();
        }
    }

    public class People
    {
        public People(int id, string name, int age)
        {
            this.Id = id;
            this.Name = name;
            this.Age = age;
        }

        public int Id
        {
            get;
            set;
        }

        public string Name
        {
            get;
            set;
        }

        public int Age
        {
            get;
            set;
        }
    }
时间: 2024-10-26 00:00:52

IEqualityComparer<T>接口的相关文章

C#高级编程四十七天----集合接口和类型

集合接口和类型 前面介绍了数组和Array类实现的接口.数组的大小是固定的.如果元素个数是动态的,就应私用集合类. List<T>是与数组相当的集合类.还有其他类型的集合:队列,栈,链表和字典. 大多数集合类都可在System.Collections和System.Collections.Generic名称空间中找到.泛型集合类位于System.Collections.Generic名称空间中;专用于特定类型的集合类位于System.Collections.Specialized名称空间中.线

C#编程(四十七)----------集合接口和类型

原文链接: http://blog.csdn.net/shanyongxu/article/details/47005979 集合接口和类型 前面介绍了数组和Array类实现的接口.数组的大小是固定的.如果元素个数是动态的,就应私用集合类. List<T>是与数组相当的集合类.还有其他类型的集合:队列,栈,链表和字典. 大多数集合类都可在System.Collections和System.Collections.Generic名称空间中找到.泛型集合类位于System.Collections.

C#编程(7_对象)

程序可以创建同一个类的多个对象,对象也称为实例.可以存储在命名变量中,也可以存储在数组.集合中.使用这些变量来调用对象方法以及公共属性的代码称为客户端代码.在C#等面向对象的语言中,典型的程序往往使用多个对象. 由于类是引用类型,因此类对象的的变量引用该对象在托管堆上的地址.如果将同一类的第二个对象分配给第一个对象,则两个对象都引用该地址的对象. 类的实例使用new关键字创建的: public class Person { public string Name { get; set; } pub

和类先关的小结

类 "类"是一种构造,通过使用该构造,您可以将其他类型的变量.方法和事件组合在一起,从而创建自己的自定义类型. 类就像一个蓝图, 它定义类型的数据和行为. 如果类没有声明为静态类,客户端代码就可以创建赋给变量的"对象"或"实例",从而使用该类. 在对变量的所有引用都超出范围之前,该变量始终保持在内存中. 所有引用都超出范围时,CLR 将标记该变量以供垃圾回收. 如果类声明为静态类,则内存中只存在一个副本,并且客户端代码只能通过该类自身而不是&qu

复杂类型集合去掉重复项的实现方法

第一步:新建一个类实现IEqualityComparer<ActionInfo>接口,用实现此接口的方法. 第二步:复杂类型集合=复杂类型集合.Distinct(new 新建类()).ToList(); 例子: 1.新建的类 public class ActionEqualCompare:IEqualityComparer<ActionInfo> { public bool Equals(ActionInfo x, ActionInfo y) { return x.ID.Equal

C#相等性比较(转)

本文阐述C#中相等性比较,其中主要集中在下面两个方面 ==和!=运算符,什么时候它们可以用于相等性比较,什么时候它们不适用,如果不使用,那么它们的替代方式是什么? 什么时候,需要自定一个类型的相等性比较逻辑 在阐述相等性比较,以及如何自定义相等性比较逻辑之前,我们首先了解一下值类型比较和引用类型比较 值类型比较对比引用类型比较 C#中的相等性比较有两种: 值类型相等,两个值在某种场景下相等 引用类型相等,两个引用指向同一个对象 默认情况下, 值类型使用值类型相等 引用类型使用引用相等 实际上,值

C#基础:LINQ 查询函数整理

1.LINQ 函数 1.1.查询结果过滤 :where() Enumerable.Where() 是LINQ 中使用最多的函数,大多数都要针对集合对象进行过滤,因此Where()在LINQ 的操作上处处可见,Where()的主要任务是负责过滤集合中的数据:其原型如下: 1 public static IEnumerbale<TSouce> Where<TSource>(this IEnumerable<Tsource> source,Func<TSource,bo

Distinct源码分析

以前比较两个List数据,筛选出所需要的数据时候,一直套两层for循环来执行.用到去重(Distinct)的时候,这两个需求其实都是一样的,都是需要比较两个集合,查看了下它的源码,里面确实有值得借鉴的地方. 先附上源码一直我调试的代码,大部分地方加上了注释 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //初始化集合 6 List<Point> points = new List<Point>() 7 { 8

【读书笔记】C#高级编程 第十章 集合

(一)概述 数组的大小是固定的.如果元素个数是动态的,就应使用集合类. List<T>是与数组相当的集合类.还有其它类型的集合:队列.栈.链表.字典和集. (二)列表 1.创建列表 调用默认的构造函数,就可以创建列表对象.在泛型类List<T>中,必须为声明为列表的值指定类型.使用默认构造函数创建一个空列表.元素添加到列表后,列表的容量会扩大,每次添加元素达到容量上限后,容量将重新设置为原来的2倍. 例子: List<string> strList = new List