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