2011-07-03 8 views
12

Null türlerini karşılaştırmam gereken bir durumum var.Null bir <T> uzantı yöntemi oluşturma, nasıl yapıyorsunuz?

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

Bu işe yaramaz:

if(foo>bar) 

aşağıdaki eserlerini ama besbelli değil null için biz değer türleriyle sınırlandırabilirsiniz olarak:

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


size 2 değerlere sahip varsayalım Bu çalışır ancak genel değil:

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

IsLessThan'umun Genel bir sürümünü nasıl yapabilirim?

Teşekkür

+2

böylece boş < 4 or null > 4 istiyorsun? –

cevap

16

bu deneyin çok:

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

+1 Hemen benzer bir şey göndermek üzereyim, bana dayayın. –

+3

Muhtemelen Karşılaştırma belgelerine uymak için geri dönüşü Nullable.Compare (t, diğer) <0 olarak okumak isteyebilirsiniz. Karşılaştırma yönteminin "kasadan küçük" için 0'dan küçük bir değer döndürmesi gerekiyor. http://msdn.microsoft.com/en-us/library/dxxt7t2a.aspx – PHeiberg

+0

Düzenlenen ipucu için teşekkürler. –

1

Bu kolaylaştırılabilir:

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