首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么IEqualityComparer<T>不在.NET中扩展IEqualityComparer

为什么IEqualityComparer<T>不在.NET中扩展IEqualityComparer
EN

Stack Overflow用户
提问于 2013-03-23 02:38:48
回答 1查看 432关注 0票数 3

在.NET中,IEnumerable<T>扩展了IEnumerable这一事实常常派上用场。令人沮丧的是,尽管EqualityComparer<T>Comparer<T>类都实现了这两个接口,但IEqualityComparer<T>IComparer<T>并没有扩展它们的非泛型对应物。这种差异是有原因的吗?

EN

回答 1

Stack Overflow用户

发布于 2013-03-23 02:41:16

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

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

这是因为IEnumerable<T>是协变的,而IComparerIEqualityComparer不是协变的。(不仅仅是在C#的意义上,尽管这也是正确的,但也是在概念计算机科学的意义上。)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15577585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档