什麼是C#中的最佳實踐,從4.0版本寫一個比較器類時開始:我們應該擴大的Comparer <T>或實現的IComparer <T>
一個。我們應該從Comparer抽象類繼承嗎?或
b。我們是否應該實現IComparer接口。
有什麼優點和缺點?
什麼是C#中的最佳實踐,從4.0版本寫一個比較器類時開始:我們應該擴大的Comparer <T>或實現的IComparer <T>
一個。我們應該從Comparer抽象類繼承嗎?或
b。我們是否應該實現IComparer接口。
有什麼優點和缺點?
我建議您擴展Comparer<T>
類,而不是像Microsoft一樣實現IComparer<T>
接口(請參見下面的第一個參考)。
現在,如果您希望自己的對象(無論T是什麼)能夠與自身進行比較,則可以實現IComparable
接口(請參見下面的第二個參考)。
來源:http://msdn.microsoft.com/en-us/library/8ehhxeaf(v=vs.110).aspx(IComparer<T>
)
我們建議您從
Comparer<T>
類,而不是實現IComparer接口派生,因爲Comparer<T>
類提供了IComparer.Compare
方法和的顯式接口實現Default
獲取對象的默認比較器的屬性。
來源:http://msdn.microsoft.com/en-us/library/cfttsh47(v=vs.110).aspx(Comparer<T>
)
派生從這個類提供
IComparer<T>
接口與集合類如SortedList<TKey, TValue>
和SortedDictionary<TKey, TValue>
泛型類使用的自定義實現。 從比較器類繼承和實現的System.IComparable
接口之間的區別如下:
- 要指定兩個對象應該是默認相比,實現你們班
System.IComparable
接口。這確保了排序操作將使用您提供的默認比較代碼。- 要定義要使用的比較器而不是默認比較器,請從Comparer類派生。然後,您可以在將比較器作爲參數的排序操作中使用此比較器。
_「從這個類派生」_ - 哪個類?我認爲你的意思是'Comparer
這是來自MSDN頁面'Comparer
我意識到,但是閱讀你的答案並不清楚你在說什麼。我必須點擊鏈接才能找到。你應該開始說:「我推薦'Comparer
我們建議您從比較器類,而不是實現IComparer接口派生,因爲比較器類提供了IComparer.Compare方法和默認的顯式接口實現屬性,獲取對象的默認比較器。
implement'IComparer' – mihai 2014-11-02 10:55:10
我認爲,那實現'IComparer'是更好的方法,因爲它可能會在以後在LINQ中使用。 – W92 2014-11-02 10:58:35
從比較器繼承。 Msdn告訴你爲什麼。通過這樣做你會得到默認值。比較行爲 – 2014-11-02 10:59:34