我理解"CompareTo比较实例和值(在我的代码中由amountA - instance和amountB-value表示),它可以返回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 "";
}
首先,CompareTo(obj)
方法返回一个正数(如果obj
较小)或一个负数(如果obj
较大),在各自的情况下不一定是+1和-1。
现在,假设你已经创建了一个类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()
的这个约定。