我想寫一個擴展方法,它將一個值與另外兩個值進行比較,並確定該值是否在另外兩個值之內。這適用於此目的單通用的可比較和可空約束
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>
上工作。如果值爲空,我希望邊界條件被忽略。我曾嘗試在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));
}
是否可以編寫一個單獨的方法來實現這個目標?
你不需要投給'布爾',你可以代替'一個? b:true' with'a && b' – SLaks
當'min'爲null時,a && b'爲false,我希望它是真的。我錯過了什麼? – djv
然後你想'!a || B'。 – SLaks