是否有任何已知的.compareto (object value)方法实际返回小于-1或大于1的值的实现?

本文关键字:小于 返回 大于 实现 方法 任何 compareto value object 是否 | 更新日期: 2023-09-27 18:01:39

我很好奇,因为MSDN文档中说:

小于0:该实例小于value。

0:该实例等于value。

大于0:此实例大于value。

如果你只想比较一个小于、等于或大于的值,为什么不直接使用-1、0和1呢?

是否有任何已知的.compareto (object value)方法实际返回小于-1或大于1的值的实现?

这里有两件事需要考虑。

  1. 文件内容
  2. 实现的内容

实际的实现目前可能总是返回-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);
}

Int32Int64比较的实现方式不同。更新:@手术室。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)的整数,其中最小值减去最大值将适合。