我是这样实现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
进行比较。问题是,我不想在我在本课程中定义的enum
上使用switch-case
来告诉要订购的内容。有没有办法让我决定按漂亮和干净订购哪个功能?
鉴于你的类有一大堆不同的比较方式,它几乎肯定根本不应该实现IComparable
。
相反,请为比较对象的每种不同方式创建IComparer<T>
实例。 然后,想要比较该类型的实例的人可以选择使用最适合其情况的比较的比较器。