gpt4 book ai didi

c# - 告诉 HashSet 使用 IEquatable?

转载 作者:太空狗 更新时间:2023-10-29 17:33:26 26 4
gpt4 key购买 nike

我在 HashSet 上读到的是它使用类的默认比较器。我希望下面的代码在将第二个 Spork 添加到哈希集时失败。我认为我对正在发生的事情的理解是不完整的。来自 HashSet 构造函数的 MSDN:

The IEqualityComparer implementation to use when comparing values in the set, or null to use the default EqualityComparer implementation for the set type.

那么什么是默认比较器,我如何告诉 .Net 使用我自己的比较器?

public class Spork : IEquatable<Spork>
{
public int Id { get; set; }


public bool Equals(Spork other)
{
return other != null && other.Id == this.Id;
}

public override bool Equals(object obj)
{
var other = obj as Spork;
return other != null && other.Id == this.Id;
}

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

public class Bjork
{
public static HashSet<Spork> Sporks { get; set; }
public static void Main()
{
Sporks = new HashSet<Spork>();
Sporks.Add(new Spork() { Id = 0 });
Sporks.Add(new Spork() { Id = 0 }); // come on, please throw an exception
}
}

最佳答案

使用你的相等方法——但是 HashSet<T>.Add 当您尝试添加相等的值时不会抛出异常 - 它只会返回 false。

如果更改最后两行打印出Add的返回值,你会看到它返回 True第一次,然后False .

关于c# - 告诉 HashSet 使用 IEquatable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7003825/

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