2011-07-03 34 views
12

我有一種情況,我需要比較可空類型。
假設你有2個值:創建可爲空的<T>擴展方法,你怎麼做?

int? foo=null; 
int? bar=4; 

這是行不通的:

if(foo>bar) 

下面的作品,但顯然不是爲空的,我們將其限制爲值類型:

public static bool IsLessThan<T>(this T leftValue, T rightValue) where T : struct, IComparable<T> 
{ 
     return leftValue.CompareTo(rightValue) == -1; 
} 

這工作,但它不是通用的:

public static bool IsLessThan(this int? leftValue, int? rightValue) 
{ 
    return Nullable.Compare(leftValue, rightValue) == -1; 
} 

如何製作我的IsLessThan的通用版本?

非常感謝

+2

所以你要空< 4 or null > 4? –

回答

16

試試這個:

public static bool IsLessThan<T>(this Nullable<T> t, Nullable<T> other) where T : struct 
{ 
    return Nullable.Compare(t, other) < 0; 
} 
+0

+1正要發佈類似的東西,打我吧。 –

+3

您可能想要使Nullable.Compare(t,other)<0的返回值符合比較文檔。比較方法應該爲「小於」情況返回小於0的值。 http://msdn.microsoft.com/en-us/library/dxxt7t2a.aspx – PHeiberg

+0

感謝您的提示,編輯。 –

1

它可以簡化爲:

public static bool IsLessThan<T>(this T? one, T? other) where T : struct 
{ 
    return Nullable.Compare(one, other) < 0; 
}