【问题标题】:Return of CompareTo in C#在 C# 中返回 CompareTo
【发布时间】:2021-12-14 22:46:22
【问题描述】:

我理解“CompareTo 比较实例和值(在我的代码中由 amountA - 实例和 amountB 值表示),它可能返回 1、-1 或 0,具体取决于我们对实例和值的了解。

谁能解释一下为什么它返回 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 "";
    }

【问题讨论】:

标签: c# methods compareto


【解决方案1】:

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

现在,假设您创建了一个类 Foo 并定义了 Compare(Foo item) 方法(即它继承了 IComparable&lt;Foo&gt;)并创建了两个对象 bar1bar2

对于任何支持运算符>或

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() 的约定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多