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()
的约定。
我理解“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()
的约定。