Return C# 中的 CompareTo

Return of CompareTo in C#

我理解“CompareTo 比较实例和值(在我的代码中由 amountA - 实例和 amountB 值表示)并且它可以 return 1、-1 或 0,具体取决于我们有什么实例和值。

谁能解释一下为什么它 return 是 1,-1 或 0?虽然能用,但还是想对这个方法有更深入的了解。

谢谢!

请参阅下面我的 C# 代码//

        if (Math.Round(amountA, 2).CompareTo(Math.Round(amountB, 2)) == 0)   
        {
            return ("Plan " + planA.Name + " costs " + amountA) + " " + ("Plan " + planB.Name + " costs " + amountB) + " " + message3;
        }
        else if (amountA.CompareTo(amountB) > 0)
        {
            return ("Plan " + planA.Name + " costs " + amountA) + " " + ("Plan " + planB.Name + " costs " + amountB) + " " + message1;
        }
        else if (amountA.CompareTo(amountB) < 0)
        {
            return ("Plan " + planA.Name + " costs " + amountA) + " " + ("Plan " + planB.Name + " costs " + amountB) + " " + message2;
        }

        return "";
    }

首先,CompareTo(obj)方法returns一个正数(如果obj较小)或一个负数(如果obj较大),在各自的情况下不一定是 +1 和 -1。

现在,假设您创建了一个 class Foo 并定义了 Compare(Foo item) 方法(即它继承了 IComparable<Foo>)并创建了两个对象 bar1和其中的 bar2

对于任何支持运算符 > 或 < 的对象,您可以使用

进行比较
if(bar1 > bar2) { ... }   // Case 1
if(bar1 < bar2) { ... }   // Case 2

if(bar1 >= bar2) { ... }  // Case 3
if(bar1 <= bar2) { ... }  // Case 4

然而,通常情况并非如此。所以你在所有情况下都使用 Compare() 方法如下:

if(bar1.Compare(bar2) > 0) { ... }   //Case 1
if(bar1.Compare(bar2) < 0) { ... }   //Case 2

if(bar1.Compare(bar2) >= 0) { ... }  //Case 3
if(bar1.Compare(bar2) <= 0) { ... }  //Case 4

注意到这两种情况的相似之处,我希望现在清楚为什么要遵循 ICompare() 的约定。