我想知道因为MSDN文档说明如下:
小于零:此实例小于值。
零:此实例等于值。
大于零:此实例大于值。
如果您只想比较一个小于,等于或大于的值,为什么不只使用-1,0和1?
答案 0 :(得分:4)
这个问题可能是广泛的,但我至少知道在我公司使用的许多此类实现,因为我写了它们:
public int CompareTo(Student other)
{
return this.Grade - student.Grade;
}
答案 1 :(得分:4)
这里有两件事要考虑。
实际的实现当前可能总是返回-1,0或1,而不是其他任何东西。请注意,我还没有验证这一点。
但是,文档规定使用负值和正值是合法的,而不仅仅是-1和+1。
这意味着,要使用.CompareTo
编写健壮的代码,您需要处理负值和正值,而不仅仅是-1和+1。
请注意,这并不意味着您不能从您自己的CompareTo
实现中返回 -1和+1,但您还需要为其他任何值做好准备。< / p>
为简单起见,在某些情况下,实现可能只返回从另一个值中减去一个值的结果,因此您将获得不是-1或+1的内容。
答案 2 :(得分:2)
如果您要查看[{1}},CompareTo
等类型的Byte
实施,您会看到
Int16
public int CompareTo(short value)
{
return (this - value);
}
或Int32
比较未实现相同方式。更新:因为@ O.R.Mapper注意到,因为算术溢出。
答案 3 :(得分:1)
据我了解,有很多(特别是用户定义的)。 MSDN是非特定的,因为你不应该依赖它,只要它是有效的,CompareTo产生的值并不重要。例如,通过减去它们来比较两个int
是最快的。
一个真实的例子,这个程序打印88
。
static void Main(string[] args)
{
Int16 a = 100;
Int16 b = 12;
Console.WriteLine(a.CompareTo(b));
}
在做这个小调查时,我发现一开始看起来有点奇怪。 Int16
(short
)使用此方法,但Int32
(int
)不会,并返回-1
,0
,1
。这可能是因为我们正在使用小于返回类型(Int32
)的整数,其中最小值减去最大值将适合。