2015-06-29 43 views
-1

我有一個類,看起來像這樣使類它自己的Comparer

public class Foo 
     { 
      public int A { get; set; } 
      public List<string> Bs { get; set; } 
     } 

而一個比較器,看起來像這樣

public class FooComparer : IComparer<Foo> 
     { 
      public int Compare(Foo x, Foo y) 
      { 
       return x.A.CompareTo(y.A); 
      } 
     } 

我想這些組合成一兩件事,但是很關心這不是很好的做法,或者只是顯得很古怪。你對此有什麼看法

public class Foo : IComparer<Foo> 
     { 
      public int A { get; set; } 
      public List<string> Bs { get; set; } 

      public int Compare(Foo x, Foo y) 
       { 
        return x.A.CompareTo(y.A); 
       } 
      } 
+2

您通常直接實現'IComparable的' – xanatos

+0

@AdamHouldsworth實施例的代碼是[題外話](http://codereview.stackexchange.com/幫助/話題)進行代碼審查。 – Mast

+0

@Mast啊,因爲這是一般的最佳做法?是啊,夠公平的,但仍然自以爲是。只是不想在沒有提供替代品的情況下投票結束。 –

回答

5

我不太喜歡,因爲有IComparable<T>這個接口。

現在......作爲IComparer<T>無狀態界面,你可以自由地做到這一點......沒有什麼不好的事情會真的發生......但我仍然不喜歡它,例如,像SortedDictionary<,>這樣的集合「保持「對比較器的引用,所以它們會將集合保持爲完整對象(包含例如List<string> Bs),浪費內存。然後,你會傳遞給SortedDictionary<,>什麼? Foo的實例是否僅用作比較器或Foo(包含數據)的「完整」實例? (具有那麼問題,它的壽命將被作爲SortedDictionary<,>相同)