我有一个如下所述的扩展方法。有没有办法让它以通用方式工作。对于 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
,这将允许它工作。