以下是比较两个DateTimes的两种方法:
DateTime now = DateTime.Now;
DateTime then = new DateTime(2008, 8, 1);
// Method 1
if (DateTime.Compare(then, now) < 0)
// ...
// Method 2
if (then < now)
// ...
.Compare
返回一个整数(-1,0,1),表示第一个实例是否早于,等于或晚于第二个实例。
我的问题是,当我可以使用关系运算符时,为什么我会使用.Compare
<
,<=
,==
,>=
,{{1直接?在我看来,使用>
,我需要使用关系运算符(至少在上面的例子中;或者我可以创建一个检查案例-1,0和1的switch语句。)
哪种情况更喜欢或需要使用.Compare
?
答案 0 :(得分:15)
通常,类型上的.Compare
方法用于排序,而不是用于直接比较。
IComparable<T>
接口在类型上受支持时,允许许多框架类正确地对集合进行排序(例如List<T>.Sort
)。
话虽如此,如果您希望能够在泛型类或方法中进行比较,将通用参数限制为实现IComparable
或IComparable<T>
的类型将允许您使用{{ 1}}用于在具体类型未知时进行比较。
答案 1 :(得分:5)
当您将对象作为IComparable
传递时,“关系”运算符不可用。在这种情况下,它可以很方便。