[英]Why doesn't IEqualityComparer<T> extend IEqualityComparer in .NET
在.NET中, IEnumerable<T>
扩展IEnumerable
的事实经常派上用场。 令人沮丧的是,尽管IEqualityComparer<T>
和IComparer<T>
并未扩展其非泛型对应项,尽管EqualityComparer<T>
和Comparer<T>
类实现了两个接口。 有这种差异的原因吗?
如果我有一个字符串序列,我可以用它来获取一个对象序列,因为每个字符串也是一个对象。 任何顺序都是如此。 给定任何序列,我总能得到一个对象序列。
如果我有一个可以比较两个字符串的对象,则不能使用它来比较两个对象,因为这两个对象可能不是字符串。
这样做的原因是因为IEnumerable<T>
是协变的,而IComparer
和IEqualityComparer
不是。 (不仅在C#的意义上也是如此,但在概念计算机科学的意义上也是如此。)
至于为什么具体的EqualityComparer<T>
和Comparer
类实现两个接口,而不仅仅是通用版本,是一个决定,只有选择创建这些类型的员工才能真正解释。 我想他们之所以这样做,是因为当时有足够的人使用接口的非泛型版本,他们希望这些类型可用于所有现有的非泛型代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.