C# 存在两个List 比较两个List值是否相等

在 C# 中,比较两个 List 对象是否相等可以有多种方法。最常见的是通过逐元素比较和使用内置方法。下面我将介绍几种方法来比较两个 List 对象。

逐元素比较

最直接的方法是逐个比较两个 List 的元素。需要注意的是,这种方法要求两个 List 的长度相同,且每个位置的元素相等。

csharp
using System; using System.Collections.Generic; class Program { static void Main() { List<int> list1 = new List<int> { 1, 2, 3, 4, 5 }; List<int> list2 = new List<int> { 1, 2, 3, 4, 5 }; bool areEqual = AreListsEqual(list1, list2); Console.WriteLine($"Lists are equal: {areEqual}"); } static bool AreListsEqual<T>(List<T> list1, List<T> list2) { if (list1.Count != list2.Count) return false; for (int i = 0; i < list1.Count; i++) { if (!list1[i].Equals(list2[i])) return false; } return true; } }

使用 SequenceEqual 方法

使用 LINQ 的 SequenceEqual 方法可以简化列表的比较。这种方法不仅比较元素,还比较顺序。

csharp
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List<int> list1 = new List<int> { 1, 2, 3, 4, 5 }; List<int> list2 = new List<int> { 1, 2, 3, 4, 5 }; bool areEqual = list1.SequenceEqual(list2); Console.WriteLine($"Lists are equal: {areEqual}"); } }

自定义比较器

如果需要自定义比较规则,可以实现 IEqualityComparer<T> 接口,然后使用 SequenceEqual 方法。

csharp
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List<string> list1 = new List<string> { "apple", "banana", "cherry" }; List<string> list2 = new List<string> { "Apple", "Banana", "Cherry" }; bool areEqual = list1.SequenceEqual(list2, new CaseInsensitiveComparer()); Console.WriteLine($"Lists are equal: {areEqual}"); } } class CaseInsensitiveComparer : IEqualityComparer<string> { public bool Equals(string x, string y) { return string.Equals(x, y, StringComparison.OrdinalIgnoreCase); } public int GetHashCode(string obj) { return obj.ToLower().GetHashCode(); } }