gpt4 book ai didi

c# - 为什么 IEqualityComparer 不在 .NET 中扩展 IEqualityComparer

转载 作者:行者123 更新时间:2023-12-05 08:01:11 25 4
gpt4 key购买 nike

在 .NET 中,IEnumerable<T>延伸IEnumerable经常派上用场。令人沮丧的是IEqualityComparer<T>IComparer<T>不要扩展它们的非通用对应物,尽管 EqualityComparer<T>Comparer<T>类实现这两个接口(interface)。这种差异有什么原因吗?

最佳答案

如果我有一个字符串序列,我可以用它来获得一个对象序列,因为每个字符串也是一个对象。任何序列都是如此;当给定任何序列时,我总能得到一个对象序列。

如果我有一个可以比较两个字符串的对象,我不能用它来比较两个对象,因为这两个对象可能不是字符串。

之所以这样是因为IEnumerable<T>是协变的,而 IComparerIEqualityComparer不是。 (不仅在 C# 意义上,虽然这也是正确的,而且在概念计算机科学意义上也是如此。)

至于为什么具体EqualityComparer<T>Comparer类实现两个接口(interface),而不仅仅是通用版本,这个决定只能由选择创建这些类型的员工真正解释。我想他们这样做是因为当时有足够多的人在使用接口(interface)的非泛型版本,他们希望这些类型可用于所有现有的非泛型代码。

关于c# - 为什么 IEqualityComparer<T> 不在 .NET 中扩展 IEqualityComparer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15577585/

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