2011-04-11 91 views
16

下面是比較兩個日期時間的方法有兩種:比較DateTime是否:DateTime.Compare()與關係運算符

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,無論如何我都需要使用關係運算符(至少在上面的例子中;或者我可以創建一個switch語句來檢查個案-1,0和1)。

什麼情況會更喜歡或需要使用DateTime.Compare()

回答

14

通常,類型上的.Compare方法用於排序,而不用於直接比較。

IComparable<T>接口支持某種類型時,允許許多框架類正確地對集合進行排序(例如,List<T>.Sort)。

話雖這麼說,如果你希望能夠做一個泛型類或方法中的比較,限制您的泛型參數到實現IComparableIComparable<T>將允許您使用.Compare()用於比較時的具體類型是未知類型。

+0

完美感,謝謝。 – JYelton 2011-04-11 17:54:19

5

當您將對象作爲IComparable傳遞時,「關係」運算符不可用。在這種情況下,它可以很方便。