IEqualityComparer的使用

当我们用Linq操作我们自定义的对像数组时,我们会发现有些方法直接使用的话根本不起作用,比如:Distinct、Except、Intersect等扩展方法。

对于我们自定义的对象的比较,我们必须实现IEqualityComparer接口来判断两个对象的相等性。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Model> list1 = new List<Model>();
            for (int i = 0; i < 10; i++)
            {
                list1.Add(new Model { Id = i, Name = i.ToString() });
            }
            List<Model> list2 = new List<Model>();
            for (int i = 5; i < 15; i++)
            {
                list1.Add(new Model { Id = i, Name = i.ToString() });
            }
            var list = list1.Except(list2, new ModelEqualityComparer());
            foreach (var item in list)
            {
                Console.WriteLine(item.Id + "\t" + item.Name);
            }
            List<Person> list3 = new List<Person>();
            for (int i = 0; i < 10; i++)
            {
                list3.Add(new Person { Id = i, Name = i.ToString() });
            }
            List<Person> list4 = new List<Person>();
            for (int i = 5; i < 15; i++)
            {
                list4.Add(new Person { Id = i, Name = i.ToString() });
            }
            var list5 = list3.Except(list4);
            foreach (var item in list)
            {
                Console.WriteLine(item.Id + "\t" + item.Name);
            }
            Console.ReadKey(true);
        }
    }
    class Model
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    class ModelEqualityComparer : IEqualityComparer<Model>
    {
        public bool Equals(Model x, Model y)    //比较x和y对象是否相同,按照地址比较
        {
            return x.Id == y.Id;
        }
        public int GetHashCode(Model obj)
        {
            return obj.ToString().GetHashCode();
        }
    }
    class Person : IEqualityComparer<Person>
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool Equals(Person x, Person y)    //比较x和y对象是否相同,按照地址比较
        {
            return x.Id == y.Id;
        }
        public int GetHashCode(Person obj)
        {
            return obj.ToString().GetHashCode();
        }
    }
}


知识共享许可协议
《IEqualityComparer的使用》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
相邻依据:发表时间
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     154.71ms