是否有任何已知的.compareto (object value)方法实际返回小于-1或大于1的值的实现?
本文关键字:小于 返回 大于 实现 方法 任何 compareto value object 是否 | 更新日期: 2023-09-27 18:01:39
我很好奇,因为MSDN文档中说:
小于0:该实例小于value。
0:该实例等于value。
大于0:此实例大于value。
如果你只想比较一个小于、等于或大于的值,为什么不直接使用-1、0和1呢?
这里有两件事需要考虑。
- 文件内容
- 实现的内容
实际的实现目前可能总是返回-1、0或1,而不会返回其他任何值。请注意,我还没有验证这一点。
但是,文档规定使用负值和正值都是合法的,而不仅仅是-1和+1。
这意味着你要使用.CompareTo
编写健壮的代码,你需要处理负数和正值,而不仅仅是-1和+1。
CompareTo
实现中返回 -1和+1,但您也需要为任何其他值做好准备。
为简单起见,在某些情况下,实现可能只返回一个值减去另一个值的结果,因此您将得到的结果不是-1或+1。
这个问题可能有点宽泛,但是我至少知道在我的公司里有很多这样的实现,因为它们是我写的:
public int CompareTo(Student other)
{
return this.Grade - student.Grade;
}
如果您将查看Byte
, Int16
等类型的CompareTo
实现,您将看到
public int CompareTo(short value)
{
return (this - value);
}
Int32
或Int64
比较的实现方式不同。更新:@手术室。Mapper注意到,因为算术溢出。
据我所知,有很多(特别是用户定义的)。MSDN是非特定的,因为你不应该依赖它,来自CompareTo的值并不重要,只要它是有效的。例如,比较两个int
s是最快的减去它们。
一个真实的例子,这个程序打印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
)的整数,其中最小值减去最大值将适合。