Я хочу написать метод расширения, который сравнивает значение с двумя другими значениями и определяет, находится ли значение в двух других. Это работает для этой целиСопоставимые и Nullable ограничения на один общий
public static bool IsWithin<T>(this T value, T min, T max) where T : IComparable<T>
{
return (bool)(value.CompareTo(min) > 0 && value.CompareTo(max) < 0);
}
Я также хотел бы расширить этот метод, чтобы работать на Nullable<T>
. Я хотел бы, чтобы любое граничное условие игнорировалось, если значение равно null. Я попытался поставить дополнительное ограничение на T, но это не поддерживается. Следующий код не компилируется, но это то, чего я хочу достичь.
public static bool IsWithinInclusive<T>(this T value, Nullable<T> min, Nullable<T> max) where T : IComparable<T>
{
return (bool)(
(min.HasValue ? value.CompareTo(min) >= 0 : true) &&
(max.HasValue ? value.CompareTo(max) <= 0 : true));
}
Возможно ли написать один метод, который достигает этого?
Вам не нужно бросание к 'BOOL ', и вы можете заменить' a? b: true' с 'a && b' – SLaks
' a && b' является ложным, когда 'min' равно null, я хочу, чтобы оно было истинным. Я что-то пропустил? – djv
Тогда вы хотите '! A || b'. – SLaks