Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Kiểm tra hai List đối tượng bằng nhau trong C#

Giới thiệu

List<T>.Equals(object) kế thừa từ object, do đó so sánh tham chiếu. Hai list khác instance luôn false dù nội dung giống hệt nhau.

Ví dụ 1: Hai list nội dung khác nhau

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main(string[] args)
    {
        List list1 = new List();
        list1.Add("One");
        list1.Add("Two");
        list1.Add("Three");
        list1.Add("Four");
        list1.Add("Five");

        Console.WriteLine("Các phần tử List1...");
        foreach (string res in list1)
        {
            Console.WriteLine(res);
        }

        List list2 = new List();
        list2.Add("India");
        list2.Add("US");
        list2.Add("UK");
        list2.Add("Canada");
        list2.Add("Poland");
        list2.Add("Netherlands");

        Console.WriteLine("Các phần tử List2...");
        foreach (string res in list2)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("List2 bằng List1? = " + list2.Equals(list1));
    }
}

Kết quả

Các phần tử List1...
One
Two
Three
Four
Five
Các phần tử List2...
India
US
UK
Canada
Poland
Netherlands
List2 bằng List1? = False

Ví dụ 2: Gán tham chiếu list3 = list2

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main(string[] args)
    {
        List list1 = new List();
        list1.Add("One");
        list1.Add("Two");
        list1.Add("Three");
        list1.Add("Four");
        list1.Add("Five");

        Console.WriteLine("Các phần tử List1...");
        foreach (string res in list1)
        {
            Console.WriteLine(res);
        }

        List list2 = new List();
        list2.Add("India");
        list2.Add("US");
        list2.Add("UK");
        list2.Add("Canada");
        list2.Add("Poland");
        list2.Add("Netherlands");

        Console.WriteLine("Các phần tử List2...");
        foreach (string res in list2)
        {
            Console.WriteLine(res);
        }

        List list3 = new List();
        list3 = list2; // gán tham chiếu
        Console.WriteLine("List3 bằng List2? = " + list3.Equals(list2));
    }
}

Kết quả

Các phần tử List1...
One
Two
Three
Four
Five
Các phần tử List2...
India
US
UK
Canada
Poland
Netherlands
List3 bằng List2? = True

So sánh nội dung thực sự

  • Dùng list1.SequenceEqual(list2) (cần using System.Linq;) – so sánh theo thứ tự.
  • Dùng new HashSet<T>(list1).SetEquals(list2) – so sánh tập hợp (bỏ qua thứ tự, bỏ trùng).
  • Viết phương thức mở rộng (extension method) so sánh tùy chỉnh.