好吧,我正在學習我學到的所有東西,並試圖在C#中實現它。鑑於我在Java中擁有背景知識,目前爲止我的工作一直非常順利,但我遇到了使用Comparer對象和函數等問題。我不關心直接實現/翻譯,但我想知道如何C#比較兩個通用值。它用什麼來排序呢?哈希碼,或者一些特定於C#的方法?比較器/排序/可比較的方法和返回值
所以只是爲了澄清,我知道如何使用C#中的方法進行排序,搜索等。我想知道的是底下發生了什麼 - 使用比較器和其他函數來比較兩個泛型的值是什麼?
好吧,我正在學習我學到的所有東西,並試圖在C#中實現它。鑑於我在Java中擁有背景知識,目前爲止我的工作一直非常順利,但我遇到了使用Comparer對象和函數等問題。我不關心直接實現/翻譯,但我想知道如何C#比較兩個通用值。它用什麼來排序呢?哈希碼,或者一些特定於C#的方法?比較器/排序/可比較的方法和返回值
所以只是爲了澄清,我知道如何使用C#中的方法進行排序,搜索等。我想知道的是底下發生了什麼 - 使用比較器和其他函數來比較兩個泛型的值是什麼?
我想知道如何C#比較兩個泛型值
它不會/不能,這就是爲什麼有是ICompariable和的IComparer接口..
什麼我想知道引擎蓋下是怎麼回事
如果你在談論.Net提供的類型,那麼..
如果您有一個已經支持IComparer的類型數組(例如字符串或整數),則可以對該數組進行排序而不提供對IComparer的任何明確引用。在這種情況下,數組元素將轉換爲IComparer(Comparer.Default)的默認實現。
How to use the IComparable and IComparer interfaces in Visual C#可能是我見過的針對您的問題的最好的文章。
IComparable的的作用是提供比較特定類型
的IComparer的作用是提供附加的比較機制的兩個對象的方法。例如,您可能希望在多個字段或屬性上提供您的類的排序,在同一字段上升序和降序排列,或者兩者都有。
這一切都很好,但我想知道引擎蓋下發生了什麼。我知道如何使用IComparer/IComparable /各種方法和算法,以及我不知道如何使用的方法。我想最簡單的方式來說明它是我想看到它比較時的確切功能。最好的方法就是清楚地看到源代碼,但如果我可以在任何地方找到C#源代碼,我就會發現它。 – JonMcDev
我提供的鏈接清楚地說明發生了什麼,在某些時候它只是'請注意,IComparer.Compare方法需要三級比較。取決於一個值是否大於,等於或小於另一個,返回1,0或-1。排序順序(升序或降序)可通過在此方法中切換邏輯運算符進行更改。 –
@JonMcDev https://www.bing.com/search?q=microsoft+reference+source –
'int CompareTo(object other)':https://msdn.microsoft.com/en-us/library/system.icomparable%28v=vs.110%29.aspx – Mephy
您是否正在使用「generic」作爲「對象」的通用術語,還是使用「通用」作爲「C#泛型」術語? :)一些示例代碼顯示了你想要了解的內容可能會有所幫助。 (在編輯你的帖子時,考慮同時刪除與你的問題沒有直接關係的「你的生活故事」文本)。 –