C# 存在两个List 比较两个List值是否相等
在 C# 中,比较两个 List
对象是否相等可以有多种方法。最常见的是通过逐元素比较和使用内置方法。下面我将介绍几种方法来比较两个 List
对象。
逐元素比较
最直接的方法是逐个比较两个 List
的元素。需要注意的是,这种方法要求两个 List
的长度相同,且每个位置的元素相等。
csharpusing 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
方法可以简化列表的比较。这种方法不仅比较元素,还比较顺序。
csharpusing 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
方法。
csharpusing 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();
}
}