C# 4.0 使用泛型实现IsNotNullAndGreaterThanZero扩展方法
我有一个如下所述的扩展方法。是否有一种方法可以使它以通用的方式工作。对于int?、decimal?、long?、double?。或者对于不同的数字数据类型比较0(零)的方式是否有限制C# 4.0 使用泛型实现IsNotNullAndGreaterThanZero扩展方法,c#-4.0,generics,extension-methods,C# 4.0,Generics,Extension Methods,我有一个如下所述的扩展方法。是否有一种方法可以使它以通用的方式工作。对于int?、decimal?、long?、double?。或者对于不同的数字数据类型比较0(零)的方式是否有限制 public static bool IsNotNullAndGreaterThanZero(this decimal? value) { return (value ?? 0M) > 0M; } 你可以这样做: public static bool IsNotNullAndGreaterThanDefau
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;
}
公共静态bool不为空且大于默认值(此T?值)
其中T:struct,i可比较
{
返回值!=null&&value.value.CompareTo(默认值(T))>0;
}
这使用了一个事实,即对于大多数值类型,默认值是“自然零”。您可以使用以下方法:
public static bool IsNotNullAndGreaterThanZero<T>(this T? value)
where T : struct, IConvertible
{
return value != null && value.ToDecimal() > 0M;
}
公共静态布尔值不为null且大于零(此T?值)
其中T:struct,IConvertible
{
返回值!=null&&value.ToDecimal()>0M;
}
基本值类型(如int/long/double)都实现了IConvertible
,这将允许此操作