Я реализованных 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
, который я определил в этом классе, чтобы рассказать, что заказать. Есть ли способ, которым я решаю, какую функцию заказывать красивой и чистой?
Благодарим за помощь. У меня есть хинч, что вы имеете в виду, но не могли бы вы объяснить немного дальше? Я имею в виду, как это сделать? – hei
@hei Создайте класс, который реализует 'IComparer' для каждого способа сравнения вашего объекта. Каждый объект сравнивает их по-другому. Кто-то, желающий выполнить операцию, которая требует знания того, как эти объекты сравниваются (например, операция сортировки), может принять сопоставитель, соответствующий ситуации. Если они хотят сравнить с помощью медианного, они используют «MedianComparer», если они хотят сравнить с помощью среднего значения, они используют «MeanComparer» и т. Д. –
Servy
Итак, у меня есть 4 функции «CompareTo()»? И я более или менее copy-paste, просто использую разные функции вместо 'GetValue()' – hei