這兩個接口似乎比較對象的平等,所以他們之間的主要區別是什麼?IComparable和IEquatable接口有什麼區別?
74
A
回答
160
IEquatable
測試兩個對象是否相等。
IComparable
對所比較的對象施加總排序。
例如,IEquatable
會告訴你,5不等於7 IComparable
會告訴你,5 7.
7
前之際,在MSDN Page for IEquatable說:
IComparable接口定義
CompareTo
方法,該方法確定 實施類型的實例的排序順序 。 IEquatable 接口定義了Equals
方法, ,其確定實現類型的實例的等同性。
Equals
與CompareTo
10
除了格雷格D的答案:
你可能會實現IComparable沒有實現IEquatable的一類,其中一個部分排序是有意義的,並且在非常明確地希望消費者因爲CompareTo()返回零,所以這個不是意味着對象是相等的(除了排序的目的)。
13
IEquatable<T>
爲了平等。
IComparable<T>
訂購。
相關問題
- 1. IEquatable和剛剛重寫Object.Equals()之間有什麼區別?
- 2. REPL和口譯員有什麼區別?
- 3. MySQL中的套接字和端口連接有什麼區別?
- 4. C#-IComparable <T>和IEquatable <T>
- 5. 範圍和連接有什麼區別?
- 6. ,和+連接時有什麼區別?
- 7. GCC和LD鏈接有什麼區別?
- 8. 鏈接和綁定有什麼區別?
- 9. ChildEventListener和ValueEventListener Firebase接口有什麼區別?
- 10. Erlang Web網關接口(EWGI)和Webmachine之間有什麼區別?
- 11. 抽象類和接口之間有什麼區別?
- 12. Spring的TestExecutionListener接口中prepareTestInstance和beforeTestMethod有什麼區別?
- 13. 使用類和接口有什麼區別?
- 14. USB設備的配置和接口有什麼區別?
- 15. Delphi和Lazarus(FPC)的接口實現有什麼區別?
- 16. 在Typescript中,類型和接口有什麼區別?
- 17. 模擬類和接口之間有什麼區別?
- 18. 接口映射和中介模塊有什麼區別?
- 19. IComparable接口
- 20. 有什麼區別`和$(Bash中有什麼區別?
- 21. ==和===有什麼區別?
- 22. ==和===有什麼區別?
- 23. 有什麼區別? :和||
- 24. ==和===有什麼區別?
- 25. '=='和'==='有什麼區別?
- 26. `&`和`ref`有什麼區別?
- 27. 有什麼區別:。!和:r!?
- 28. | 0和~~有什麼區別?
- 29. Appender和〜有什麼區別?
- 30. 這2個進口有什麼區別?
這聽起來更像是一個特例比較器,而不像一個正確實現'IComparable'的對象。你能想出一個有意義的例子,其中'CompareTo(...)== 0'不**意味着平等嗎?我當然不能。事實上,接口契約(按照MSDN)**要求**「CompareTo(...)== 0」意味着相等。說白了,在這種情況下,使用一個特殊的Comparator對象,不*執行'IComparable'。 – 2010-03-09 17:05:00
@Konrad - 我確實指出了一些注意事項 - 類型沒有實現IEquatable(很明顯,發起者不想包含一個相等性測試),並且CompareTo結果用於排序,* not *用於評估相等性。您還會遇到相關性相等的問題(參考,值,忽略「任意」屬性 - 爲了IComparable的目的,長度爲500頁的藍皮書可能與長度爲500頁的紅皮書相等) – 2010-03-09 18:35:58
你最後一句話是錯誤的,這是我想指出的特別的錯誤:'IComparable'在這裏完全不合適。你得到的是一個非常特殊的訂單,只適用於一種特殊的情況。對於這種情況,實施一般性的「IComparable」是錯誤的。這就是'IComparer'的用處。例如,人們不能被有意義地排序。但他們*可以根據他們的薪水,他們的鞋子大小,雀斑數量或體重來訂購。因此,我們將爲所有這些情況實施不同的IComparer。 – 2010-03-09 19:08:27