实施 CompareTo() - 通过各种函数进行比较
Implement CompareTo() - compare by various functions
我是这样实现的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
的数组。问题是,我不想在我在此 class 中定义的 enum
上使用 switch-case
来告诉要订购的内容。有没有一种方法可以让我通过 nice and clean 来决定订购哪个功能?
鉴于您的 class 有一大堆不同的比较方式,它几乎肯定 根本不应该实现 IComparable
。
相反,为每种比较对象的不同方式创建 IComparer<T>
个实例。想要比较该类型实例的人可以选择使用最适合他们情况的比较的比较器。
我是这样实现的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
的数组。问题是,我不想在我在此 class 中定义的 enum
上使用 switch-case
来告诉要订购的内容。有没有一种方法可以让我通过 nice and clean 来决定订购哪个功能?
鉴于您的 class 有一大堆不同的比较方式,它几乎肯定 根本不应该实现 IComparable
。
相反,为每种比较对象的不同方式创建 IComparer<T>
个实例。想要比较该类型实例的人可以选择使用最适合他们情况的比较的比较器。