📅  最后修改于: 2023-12-03 15:30:18.108000             🧑  作者: Mango
在C#中,检查两个List对象是否相等的方法取决于其元素类型。当元素类型是基元类型或字符串时,可以使用SequenceEqual()方法。当元素类型是用户定义的类型时,需要重写Equals函数和GetHashCode函数。
下面的示例演示了如何比较两个List对象是否相等:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public 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 };
// Compare two lists using SequenceEqual
bool result1 = Enumerable.SequenceEqual(list1, list2);
Console.WriteLine("Result using SequenceEqual: " + result1);
List<Person> people1 = new List<Person>
{
new Person { Id = 1, Name = "Alice" },
new Person { Id = 2, Name = "Bob" },
new Person { Id = 3, Name = "Charlie" }
};
List<Person> people2 = new List<Person>
{
new Person { Id = 1, Name = "Alice" },
new Person { Id = 2, Name = "Bob" },
new Person { Id = 3, Name = "Charlie" }
};
// Compare two lists using custom Equals
bool result2 = people1.SequenceEqual(people2, new PersonComparer());
Console.WriteLine("Result using custom Equals: " + result2);
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
public class PersonComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
return x.Id == y.Id && x.Name == y.Name;
}
public int GetHashCode(Person obj)
{
return obj.Id.GetHashCode() ^ obj.Name.GetHashCode();
}
}
}
输出如下:
Result using SequenceEqual: True
Result using custom Equals: True
本示例中,我们使用SequenceEqual方法比较了两个整数类型的List和使用自定义Equals函数和GetHashCode函数比较了两个自定义类型(Person)的List对象。
在自定义类比较中,我们创建了一个新的类(PersonComparer),并实现IEqualityComparer接口,重写Equals函数和GetHashCode函数。由于Person类的Id和Name属性包含了唯一的值,所以可以在Equals函数中使用它们进行比较。
在比较两个List对象时,需要确保它们的元素类型实现了相应的比较方法。
总的来说,比较两个List对象是否相等是C#中常见的任务。在使用SequenceEqual方法时要注意元素类型,而在使用自定义比较方法时要确保自定义类型重写了相应的比较函数。