gpt4 book ai didi

c# - 如何找到列表之间的差异?

转载 作者:行者123 更新时间:2023-12-03 02:50:15 26 4
gpt4 key购买 nike

所以我试图找出两个类型为 Person 的列表之间的区别。这是人员类别:

class Person
{
public int Age { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }

public Person(int age, string firstName, string lastName)
{
this.Age = age;
this.FirstName = firstName;
this.LastName = lastName;
}
}

在我的代码中,我创建了 2 个变量 List<Person> list1List<Person> list2 .

我用以下变量填充 list1:

list1.Add(new Person(20, "first1", "last1"));
list1.Add(new Person(30, "first2", "last2"));
list1.Add(new Person(40, "first3", "last3"));
list1.Add(new Person(50, "first4", "last4"));

并用以下内容填充list2:

list2.Add(new Person(30, "first2", "last2"));
list2.Add(new Person(50, "first4", "last4"));

我的目标是拥有另一个列表( List<Person> list3 ),其中 list1[0]list[2]因为这不包含在 list2 中。我尝试使用 list3 = list1.Except(list2).ToList();但这只是返回 list1 的副本如果我这样做list3 = list2.Except(list1).ToList();它返回 list2 的副本。我该如何解决这个问题?我正在使用Except()对吗?

最佳答案

这里的根本问题是您需要问自己,是什么使这些对象相等?仅仅因为您为它们分配了相同的属性值,并不意味着它们就相等。例如,虽然 list1[1]list2[0] 看起来相同,但它们是 Person 对象的完全不同的实例。因此,您需要一种方法来判断一个 Person 对象何时与另一个对象“相等”。 Generate Equals and GetHashCode method overrides in Visual Studio .

这也可能有帮助,Overriding Equals in C#

希望这对您有所帮助,如果有帮助,请将其标记为答案。祝你好运!这是有效的代码:

class Program
{
static void Main(string[] args)
{
var list1 = new List<Person>();
list1.Add(new Person(20, "first1", "last1"));
list1.Add(new Person(30, "first2", "last2"));
list1.Add(new Person(40, "first3", "last3"));
list1.Add(new Person(50, "first4", "last4"));

var list2 = new List<Person>();
list2.Add(new Person(30, "first2", "last2"));
list2.Add(new Person(50, "first4", "last4"));

var list3 = list1.Except(list2).ToList();
}
}

class Person : IEquatable<Person>
{
public int Age { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }

public Person(int age, string firstName, string lastName)
{
this.Age = age;
this.FirstName = firstName;
this.LastName = lastName;
}

public override bool Equals(object obj)
{
return Equals(obj as Person);
}

public bool Equals(Person otherPerson)
{
return otherPerson != null && this.Age == otherPerson.Age && this.FirstName == otherPerson.FirstName && this.LastName == otherPerson.LastName;
}

public override int GetHashCode()
{
return this.Age.GetHashCode() + this.FirstName.GetHashCode() + this.LastName.GetHashCode();
}
}

关于c# - 如何找到列表之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61705868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com