繁体   English   中英

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

[英]Why doesn't IEqualityComparer<T> extend IEqualityComparer in .NET

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

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

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

这样做的原因是因为IEnumerable<T>是协变的,而IComparerIEqualityComparer不是。 (不仅在C#的意义上也是如此,但在概念计算机科学的意义上也是如此。)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM