为什么不'在.net中扩展IEqualityComparer

本文关键字:扩展 IEqualityComparer net 为什么不 | 更新日期: 2023-09-27 18:05:17

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

为什么不'在.net中扩展IEqualityComparer

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

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

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

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