比较日期时间:DateTime.Compare() 与关系运算符的比较

25

以下是比较两个 DateTime 的两种方法:

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方法呢?在我看来,如果使用.Compare方法,我仍然需要使用关系运算符(至少在上面的示例中是这样的;或者我可以创建一个检查-1、0和1情况的switch语句)。

在哪些情况下应该优先或必须使用DateTime.Compare()方法呢?

2个回答

19
通常,类型上的.Compare方法用于排序,而不是直接比较。
当一个类型支持IComparable<T>接口时,许多框架类可以正确地对集合进行排序(例如List<T>.Sort)。
话虽如此,如果您想在泛型类或方法中进行比较,限制泛型参数为实现了IComparableIComparable<T>接口的类型,将允许您在未知具体类型时使用.Compare()进行比较。

6

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接