2

我有一个如下所述的扩展方法。有没有办法让它以通用方式工作。对于 int?,decimal?,long?,double?。或者 0(零)的方式有限制比较不同的数字数据类型?

public static bool IsNotNullAndGreaterThanZero(this decimal? value)
{
return (value ?? 0M) > 0M;
}
4

2 回答 2

2

好吧,你可以这样做:

public static bool IsNotNullAndGreaterThanDefault<T>(this T? value)
    where T : struct, IComparable<T>
{
    return value != null && value.Value.CompareTo(default(T)) > 0;
}

这使用了这样一个事实,即对于大多数值类型,默认值是“自然零”。

于 2013-02-12T20:04:07.287 回答
0

您可以使用IConvertible来执行此操作:

public static bool IsNotNullAndGreaterThanZero<T>(this T? value)
     where T : struct, IConvertible
{
    return value != null && value.ToDecimal() > 0M;
}

基本值类型,如 int/long/double 都实现了IConvertible,这将允许它工作。

于 2013-02-12T20:05:34.510 回答