gpt4 book ai didi

c# - 通用字典上 IEqualityComparer 的用例

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

今天,在研究一个项目时,我正在浏览 Dictionary<TKey, TValue> 的文档。 .在那里我发现了一些我过去可能忽略的评论:

因为键可以继承并且它们的行为会改变,所以使用 Equals 方法进行比较无法保证它们的绝对唯一性。

对于我后来查看的大多数(键控)集合类的文档,似乎都散布了同样的评论。但是我找不到任何示例来说明所描述的潜在问题,尽管我很确定这就是构造函数接受 IEqualityComparer<TKey> 的原因。是为了,当复杂类型被用作键时它会出现。

任何人都可以向我解释在什么情况下可能会遇到此评论指出的问题吗?只要我不确切知道这样的问题是如何或何时出现的,我就无法进行设计以允许它出现。

最佳答案

使用任何对象/值作为键并不像听起来那么简单,因为它取决于 Equals 和 GetHashCode 的正确实现。老实说,“子类扭曲事物”场景并不是我经常遇到的场景,但是此 API 的更常见用途是允许在您用作键的类型未提供合适的 Equals/GetHashCode 时使用,并且不在您的控制范围内。例如,您想使用 Customer 作为键,但您只想匹配 Id(即您不想要默认的引用相等行为;也许您正在处理来自不同来源的不同对象,并且需要根据 Id 将不同的实例视为相等)。在这种情况下,您可以编写一个只考虑 Id 的自定义相等比较器。

不过就个人而言;我是简单的粉丝。我很少(如果有的话)索引除intstring 等之外的任何内容。这让事情变得简单 -同时展示了另一种常见情况:为 string 键提供区分大小写/不区分大小写或区分文化/不区分区域性的比较器。

关于c# - 通用字典上 IEqualityComparer<TKey> 的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5855364/

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