Реализация CompareTo() - сравнивать по различным функциям

Я реализовал CompareTo() вот так:

 public override int CompareTo(object obj)
 {
   //quick failsafe
   MyClass other;
   if (obj is MyClass)
   {
     other = obj as MyClass;
   }
   else 
   { 
     return 1; 
   }
   //now we should have another comparable object.
   /*
    * 1: this is greater.
    * 0: equals.
    * -1: this is less.  
    */
   if (other.GetValue() < this.GetValue())
   {
     // this is bigger
     return 1;
   }
   else if (other.GetValue() > this.GetValue())
   {
     //this is smaller
     return -1;
   }
   else 
   { 
     return 0; 
   }
}

Тем не менее, все становится интересным, когда я хочу выбрать функцию GetValue(), У меня есть пара настроенных для этого: Average(), Best(), CorrectedAverage(), Median(), Я сравниваю по массиву floats Кстати. Дело в том, что я не хочу использовать switch-case на enum Я определил в этом классе, чтобы сказать, что заказать. Есть ли способ, которым я решаю, какую функцию заказать по чистоте?

1 ответ

Решение

Учитывая, что у вашего класса есть множество разных способов его сравнения, он почти наверняка не должен реализовывать IComparable на всех.

Вместо этого создайте IComparer<T> экземпляры для каждого другого способа сравнения вашего объекта. Кто-то, кто хочет сравнивать экземпляры типа, может выбрать тот, который использует сравнение, наиболее подходящее для его ситуации.

Другие вопросы по тегам