gpt4 book ai didi

c# - 忽略其中一个字段的列表中不同项目的数量

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:43 26 4
gpt4 key购买 nike

public class Person
{
public string Name { get; set; } = string.Empty;
public string Address { get; set; } = string.Empty;
public int ID { get; set; } = 0;
}

public List<Person> ListOfPeople = new List<Person>();

现在让我们有 2 个 Person 对象:

  • 李四
  • Boring St. 5
  • 1

  • 李四
  • Boring St. 5
  • 2

ListOfPeople 中的这 2 个条目对我来说没有区别。我想在忽略 ID 字段的同时获取 ListOfPeople 中不同条目的数量。如果我只是执行 Distinct(),它会将这 2 个对象视为那个对象(因为 ID 不相同)。

最佳答案

创建一个 IEqualityComparer<Person>定义您希望如何比较值的实现。然后你可以使用

var distinctByNameAndAddress = people.Distinct(comparer).ToList();

你的相等比较器看起来像这样:

public sealed class NameAndAddressComparer : IEqualityComparer<Person>
{
public bool Equals(Person x, Person y)
{
if (ReferenceEquals(x, y))
{
return true;
}
if (ReferenceEquals(x, null) || ReferenceEquals(y, null))
{
return false;
}

return x.Name == y.Name && x.Address == y.Address;
}

public int GetHashCode(Person person) =>
ReferenceEquals(person, null) ? 0
: 23 * person.Name.GetHashCode() + person.Address.GetHashCode();
}

请注意,目前您没有覆盖 Equals/GetHashCode或实现 IEquatable<Person> ,所以即使两个对象的所有属性都相同,也会被视为不同。

关于c# - 忽略其中一个字段的列表中不同项目的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46191609/

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