比较DateTimes:DateTime.Compare()与关系运算符

JYe*_*ton 20 c# comparison datetime

以下是比较两个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)
    // ...
Run Code Online (Sandbox Code Playgroud)

.Compare 返回一个整数(-1,0,1),指示第一个实例是否早于,等于或晚于第二个实例.

我的问题是,为什么我用.Compare的时候,我可以使用关系运算符(<,<=,==,>=,>直接)?在我看来,使用.Compare,无论如何我需要使用关系运算符(至少在上面的例子中;或者我可以创建一个检查案例-1,0和1的switch语句).

什么情况会更喜欢或需要使用DateTime.Compare()

Ree*_*sey 16

通常,.Compare类型上的方法用于排序,而不是用于直接比较.

IComparable<T>当类型支持时,接口允许许多框架类正确地对集合进行排序(List<T>.Sort例如).

话虽如此,如果您希望能够在泛型类或方法中进行比较,请将通用参数限制为实现IComparableIComparable<T>允许您.Compare()在具体类型未知时进行比较的类型.


spe*_*der 5

当您将对象作为传递时IComparable,"关系"运算符不可用.在这种情况下,它可以很方便.