Это действительно просто расширение принятого ответа Фредди Риоса только с использованием 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));
}
ПРИМЕЧАНИЕ: нам не нужно проверять значение по умолчанию (T) на null, поскольку мы имеем дело либо с типами значений, либо со структурами! Это также означает, что мы можем с уверенностью предположить, что T valueToCheck не будет нулевым; Помните здесь, что T? является сокращением Nullable <T>, поэтому, добавляя расширение к Nullable <T>, мы получаем метод в int ?, double ?, bool? и т.п.
Примеры:
double? x = null;
x.IsNullOrDefault();
int? y = 3;
y.IsNullOrDefault();
bool? z = false;
z.IsNullOrDefault();