2011-07-03 2 views
12

null可能な型を比較す​​る必要がある状況があります。null可能な<T>拡張メソッドを作成するにはどうしますか?

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

これは動作しません:

if(foo>bar) 

以下の作品は明らかではないNULL可能のため、我々は値型にそれを制限するよう:

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


は、あなたが2つの値を持っていると仮定しますこれは機能しますが、一般的ではありません:

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

IsLessThanの汎用バージョンを作成するにはどうすればよいですか?

どうもありがとう

+2

ので、あなたがnull < 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

Compareドキュメントに準拠するために、戻り値をNullable.Compare(t、other)<0と読み替えるようにします。 Compareメソッドは、「小なり」の値が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; 
} 
関連する問題