gpt4 book ai didi

c# - LINQ Distinct 未按预期工作

转载 作者:行者123 更新时间:2023-11-30 15:03:14 25 4
gpt4 key购买 nike

我有以下简单的类

public class Person : IEquatable<Person>
{
public bool Equals(Person other)
{
return Name.Equals(other.Name, StringComparison.InvariantCultureIgnoreCase);
}

public override int GetHashCode()
{
return Name.GetHashCode();
}

public Person(string name)
{
Name = name;
}
public string Name { get; set; }
}

现在我正在创建一个人数组,对他们调用 distinct 并传递默认的 Equality Comparer,这是由 IEquatable<Person> 实现的

var persons = new[] {new Person("foo"), new Person("Foo"), new Person("bar"), new Person("Bar")};
persons.Distinct(EqualityComparer<Person>.Default);

当我检查不同的人时,我期待一个 IEnumerable<Person>包含 foo, bar .然而内容是foo, Foo, bar, Bar

当我用 foo, foo, bar, bar 初始化列表时结果如预期。所以在我看来好像StringComparison.InvariantCultureIgnoreCasePerson.Equals方法被忽略。

有人有想法吗?

最佳答案

此时需要让GetHashCode()得到一个case-*in*sensitive Hash Code,大小写不同的hash code 姓名

例如:

public override int GetHashCode() 
{
return Name.ToUpperInvariant().GetHashCode();
}

关于c# - LINQ Distinct 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11827956/

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