Это на самом деле просто расширение принятого ответа Фредди Риоса только с использованием Generics.
public static bool IsNullOrDefault<T>(this Nullable<T> value) where T : struct
{
return default(T).Equals( value.GetValueOrDefault() );
}
public static bool IsValue<T>(this Nullable<T> value, T valueToCheck) where T : struct
{
return valueToCheck.Equals((value ?? valueToCheck));
}
ПРИМЕЧАНИЕ нам не нужно проверять default (T) на ноль, поскольку мы имеем дело с типами значений или структурами! Это также означает, что мы можем с уверенностью предположить, что T valueToCheck не будет нулевым; Помните здесь, что T? это сокращение Nullable , поэтому, добавив расширение к Nullable , мы получим метод в int ?, double ?, bool? и т.д.
Примеры:
double? x = null;
x.IsNullOrDefault(); //true
int? y = 3;
y.IsNullOrDefault(); //false
bool? z = false;
z.IsNullOrDefault(); //true