• 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());
  • 相关阅读:
    Android混淆代码的方法
    Android开发如何在4.0及以上系统中自定义TitleBar
    设置按钮的selector
    MD5加密(Android里和Java SE里是一样的)
    Android中图片实现按钮点击效果
    Handler消息传递机制
    ContentProvider的使用
    操作Sqlite数据库
    使用Pull解析器读取XML文件
    Android添加事件的四种方法
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/11384811.html
Copyright © 2020-2023  润新知