Хитрый бит выясняет, что означает «недействительный» в каждом случае.Если «любое значение, которое считается меньшим, чем значение по умолчанию для типа данных», можно попробовать:
public static bool IsNullOrNegative<T>(this T? source)
where T : struct, IComparable<T>
{
return source == null || source.Value.CompareTo(default(T)) < 0;
}
РЕДАКТИРОВАТЬ: как отмечено в комментариях, нет «числового» ограничения - оно будет действительнымвызывать этот метод для каждого типа значения, сравнимого с самим собой, например DateTime
.Этого нельзя избежать - добавление большего количества ограничений, вероятно, немного уменьшит набор, но не полностью.
Что касается сравнения с ровно -1, вам необходимо иметь возможность определить значение "-1«для каждого типа.Там нет общего способа сделать это.Вы могли бы вручную построить Dictionary<Type, object>
из "-1 для каждого интересующего меня типа", но это было бы довольно уродливо.
Если -1 неверно, это действительно -2действует?Это странно для меня.