gpt4 book ai didi

c# - .net 中的对象比较

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

从 CLR 的角度来看,实现 IEqualityComparer 有什么不同吗? vs 覆盖 ==您将在 IEqualityComparer<T> 中使用的属性的运算符?如果是这样,您什么时候会用一个来对抗另一个?

编辑

好吧,Hashtable 的实现使用的 IEqaulityComparer 确实有意义 - 当我发布问题时,它从我的脑海中溜走了。那么IEnumerable的Linq的扩展呢。这是否意味着 .net 在执行这些扩展方法时会构建一个哈希表?

最佳答案

IEqualityComparerHashtable 使用, NameValueCollectionOrderedDictionary类以支持您的类型的“平等”的自定义定义。这就是它提供 GetHashCode() 的原因,这与平等本身没有太大关系。

如果您不提供 IEqualityComparer,上述类将默认为 Object.Equals() ,它实现了引用相等。重载的 operator == 不会在该上下文中被调用。

编辑: 某些 LINQ 的扩展方法确实将 IEqualityComparer 作为参数,但原则保持不变:如果未指定该参数,该方法将结束比较引用,而不是值,operator == 不会被调用。

关于c# - .net 中的对象比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4512444/

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