zoukankan      html  css  js  c++  java
  • Linq 等式运算符:SequenceEqual(转载)

    https://www.bbsmax.com/A/nAJvbKywJr/

    引用类型比较的是引用,需要自己实现IEqualityComparer 比较器。

    IList<string> strList1 = new List<string>(){"One", "Two", "Three", "Four", "Three"};
     
    IList<string> strList2 = new List<string>(){"One", "Two", "Three", "Four", "Three"};
     
    bool isEqual = strList1.SequenceEqual(strList2); // returns true
     
    IList<string> strList1 = new List<string>(){"One", "Two", "Three", "Four", "Three"};
     
    IList<string> strList2 = new List<string>(){ "Two", "One", "Three", "Four", "Three"};
     
    bool isEqual = strList1.SequenceEqual(strList2); // returns false
     
    //如果是引用类型,则比较的是引用
    Student std = , StudentName = "Bill" };
     
    IList<Student> studentList1 = new List<Student>(){ std };
     
    IList<Student> studentList2 = new List<Student>(){ std };
     
    bool isEqual = studentList1.SequenceEqual(studentList2); // returns true
     
    Student std1 = , StudentName = "Bill" };
    Student std2 = , StudentName = "Bill" };
     
    IList<Student> studentList3 = new List<Student>(){ std1};
     
    IList<Student> studentList4 = new List<Student>(){ std2 };
     
    isEqual = studentList3.SequenceEqual(studentList4);// returns false
     
    在上面的示例中,studentList1和studentList2包含相同的学生对象std。 所以studentList1.SequenceEqual(studentList2)返回true。 但是,stdList1和stdList2包含两个独立的学生对象std1和std2。 所以现在,stdList1.SequenceEqual(stdList2)将返回false,即使std1和std2包含相同的值。
     
    要比较复杂类型(引用类型或对象)的两个集合的值,您需要实现IEqualityComperar <T>接口,如下所示。
     
    class StudentComparer : IEqualityComparer<Student>
    {
        public bool Equals(Student x, Student y)
        {
            if (x.StudentID == y.StudentID && x.StudentName.ToLower() == y.StudentName.ToLower())
                return true;
     
            return false;
        }
     
        public int GetHashCode(Student obj)
        {
            return obj.GetHashCode();
        }
    }
     
    // following returns true
    bool isEqual = studentList1.SequenceEqual(studentList2, new StudentComparer());
  • 相关阅读:
    模-数(A/D)转换器
    数-模(D/A)转换器
    VIM 常用命令
    Linux常用命令
    一个开关电源传导、辐射处理案例-----Layout环路
    解决:PADS导入.DXF结构图出现坐标超出范围问题
    Python3-threading模块-多线程
    Python3-socketserver模块-网络服务器框架
    Python3-socket模块-低级网络接口
    Python3-面向对象
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/11384811.html
Copyright © 2011-2022 走看看