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ầnusing 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.