亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

LINQ 相等運(yùn)算符 SequenceEqual

只有一個(gè)相等運(yùn)算符:SequenceEqual。SequenceEqual方法檢查兩個(gè)集合中的元素?cái)?shù)量,每個(gè)元素的值和元素的順序是否相等。

如果集合包含原始數(shù)據(jù)類型的元素,則它將比較元素的值和數(shù)量,而具有復(fù)雜類型元素的集合將檢查對象的引用。因此,如果對象具有相同的引用,則將它們視為相等,否則將其視為不相等。

下面的示例演示了帶有原始數(shù)據(jù)類型集合的SequenceEqual方法。

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); // 返回true
Console.WriteLine(isEqual);
輸出:
True

如果元素的順序不同,則SequenceEqual()方法返回false。

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); // 返回false
Console.WriteLine(isEqual);
輸出:
false

SequenceEqual擴(kuò)展方法檢查兩個(gè)對象的引用,以確定兩個(gè)序列是否相等。這可能會(huì)給出錯(cuò)誤的結(jié)果??匆韵率纠?/p>

Student std = new Student() { StudentID = 1, StudentName = "Bill" };

IList<Student> studentList1 = new List<Student>(){ std };

IList<Student> studentList2 = new List<Student>(){ std };
       
bool isEqual = studentList1.SequenceEqual(studentList2); // 返回true

Student std1 = new Student() { StudentID = 1, StudentName = "Bill" };
Student std2 = new Student() { StudentID = 1, StudentName = "Bill" };

IList<Student> studentList3 = new List<Student>(){ std1};

IList<Student> studentList4 = new List<Student>(){ std2 };
       
isEqual = studentList3.SequenceEqual(studentList4);// 返回false

在上面的示例中,studentList1和studentList2包含相同的學(xué)生對象std。因此studentList1.SequenceEqual(studentList2)返回true。但是,stdList1和stdList2包含兩個(gè)單獨(dú)的學(xué)生對象std1和std2。所以現(xiàn)在,即使std1和std2包含相同的值,stdList1.SequenceEqual(stdList2)也將返回false。

要比較兩個(gè)復(fù)雜類型(引用類型或?qū)ο螅┘系闹?,需要?shí)現(xiàn)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();
    }
}

現(xiàn)在,您可以使用SequenceEqual擴(kuò)展方法中的上述StudentComparer類作為第二個(gè)參數(shù)來比較值:

示例:C#使用SequenceEqual比較對象類型元素

IList<Student> studentList1 = new List<Student>() { 
        new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
        new Student() { StudentID = 2, StudentName = "Steve",  Age = 15 } ,
        new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 } ,
        new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
        new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 } 
    };

IList<Student> studentList2 = new List<Student>() { 
        new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
        new Student() { StudentID = 2, StudentName = "Steve",  Age = 15 } ,
        new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 } ,
        new Student() { StudentID = 4, StudentName = "Ram" , Age = 20 } ,
        new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 } 
    };
// 以下返回true
bool isEqual = studentList1.SequenceEqual(studentList2, new StudentComparer());

要記住的要點(diǎn)

  1. SequenceEqual方法比較項(xiàng)目數(shù)及其原始數(shù)據(jù)類型的值。

  2. SequenceEqual方法比較對象對復(fù)雜數(shù)據(jù)類型的引用。

  3. 使用IEqualityComparer類可通過SequenceEqual方法比較兩個(gè)復(fù)雜類型的集合。