Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 使用泛型实现IsNotNullAndGreaterThanZero扩展方法_C# 4.0_Generics_Extension Methods - Fatal编程技术网

C# 4.0 使用泛型实现IsNotNullAndGreaterThanZero扩展方法

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

我有一个如下所述的扩展方法。是否有一种方法可以使它以通用的方式工作。对于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;
}
公共静态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
,这将允许此操作