gpt4 book ai didi

.net - 为什么我们需要 IEqualityComparer,IEqualityComparer 接口(interface)?

转载 作者:行者123 更新时间:2023-12-04 13:20:44 24 4
gpt4 key购买 nike

'Equal' 和 'GetHashcode' 方法存在于对象类中,我们的类型继承了对象基类。
直接实现对象的两种方法和使用 IComparer 接口(interface)有什么区别?

如果我们覆盖对象的 Equal 和 GetHashCode ,并推送到一个 hashtable ,它会使用覆盖的 equal 方法吗?

带有 IEqualityComparer 构造函数的新哈希表有什么不同?

最佳答案

当您需要能够“排序”对象时使用 IComparable 接口(interface),它为您提供了一个方法( CompareTo ),告诉您两个对象是 <、= 还是 >。使用 IEqualityComparer 的构造函数可以让您给出一个特定的 Equals/GetHashCode,它可能与您的对象定义的不同。通常 Hashtable 将使用您的对象覆盖 EqualsGetHashCode (或基础 object EqualsGetHashCode )。

举个例子,标准字符串以区分大小写的方式进行比较( "A" != "a" ),但是您可以创建一个 IEqualityComparer 帮助程序类,以便能够以不区分大小写的方式散列您的字符串。 (从技术上讲,此类已经存在于多个变体中:它们被称为 StringComparer.InvariantCultureIgnoreCaseStringComparer 的所有其他静态方法,它们返回实现 StringComparerIComparerIEqualityComparerIComparer<string>IEqualityComparer<string> 对象)

请注意, Hashtable 使用 IEqualityComparer 可选参数,而不是通用版本 IEqualityComparer<T> ,因为 Hashtable 是前泛型。

关于.net - 为什么我们需要 IEqualityComparer,IEqualityComparer<T> 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7751170/

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