我對這是否是在C#中使用IComparer的標準有疑問。假設我有三個Person對象:P1,P2和P3。假設我稱之爲傳入P1和P2的比較方法,結果爲0.這基本上意味着兩個人應該被歸類爲平等。現在說我調用傳入P2和P3的比較方法,結果也是0。這又意味着兩個人是平等的。從邏輯上講,可以假設P1和P3也是相等的;然而,比較方法可以實現,但有人決定實施它。那麼在這種情況下,P1和P3也會返回0,這是否是一個標準?C#IComparer <T>標準使用問題
這裏是要問我什麼代碼:
// Assume these are initialized properly
Person p1 = null, p2 = null, p3 = null;
IComparer<Person> comparer = null;
// Compare person 1 to person 2 and result is 0
Debug.Assert(comparer.Compare(p1, p2) == 0);
// Compare person 2 to person 3 and result is 0
Debug.Assert(comparer.Compare(p2, p3) == 0);
// Would this be a fair assumption that person 1 and person 3 would also be 0?
Debug.Assert(comparer.Compare(p1, p3) == 0);
我意識到,但比較方法可以以傳遞規則不適用的方式實現。 Compare方法可以返回新的Random()。Next();那麼傳遞規則就不適用了。所以我在問是否這是規則適用的比較方法的標準。 – Nick 2010-07-22 16:29:51
這是一個慣例,而且足夠強大,足以成爲接口正常運行必須遵守的合同。未定義的行爲,如果你不遵守合同:) – user7116 2010-07-22 16:33:02
真的很有趣。這就像製作一個方法:getCurrentTime(){return Time(Random()); }。這沒有意義。比較方法必須是有限的,並且始終具有相同的行爲。在你的例子中,如果連續調用3次,a.Compare(b)cound會返回3個不同的結果。我不認爲這是這個功能的用途。 – Sauleil 2010-07-22 16:35:01