[英]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.