以下に説明する拡張メソッドがあります。一般的な方法で機能させる方法はありますか。int?、decimal?、long?、double?の場合。または0(ゼロ)の方法に制限があります。異なる数値データ型で比較しましたか?
public static bool IsNotNullAndGreaterThanZero(this decimal? value)
{
return (value ?? 0M) > 0M;
}
以下に説明する拡張メソッドがあります。一般的な方法で機能させる方法はありますか。int?、decimal?、long?、double?の場合。または0(ゼロ)の方法に制限があります。異なる数値データ型で比較しましたか?
public static bool IsNotNullAndGreaterThanZero(this decimal? value)
{
return (value ?? 0M) > 0M;
}
さて、あなたはこれを行うことができます:
public static bool IsNotNullAndGreaterThanDefault<T>(this T? value)
where T : struct, IComparable<T>
{
return value != null && value.Value.CompareTo(default(T)) > 0;
}
これは、ほとんどの値タイプで、デフォルト値が「自然ゼロ」であるという事実を使用しています。
IConvertibleを使用してこれを行うことができます。
public static bool IsNotNullAndGreaterThanZero<T>(this T? value)
where T : struct, IConvertible
{
return value != null && value.ToDecimal() > 0M;
}
int / long / doubleなどの基本的な値型はすべて実装されIConvertible
ており、これを機能させることができます。