簡體   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