public BetweenPredicate(IComparer <T> comparer, T lowerBound, T upperBound, BetweenCriteria excludedBounds) { if (comparer == null) { throw new ArgumentNullException("comparer"); } _lowerBound = lowerBound; _upperBound = upperBound; _criteria = excludedBounds; _comparison = comparer.Compare; }
public static bool Between <T>(this T testValue, T lowerValue, T upperValue, BetweenCriteria criteria, bool nullOrder) where T : class, IComparable <T> { switch (criteria) { case BetweenCriteria.IncludeBoth: return(Compare(testValue, lowerValue, ComparisonCriteria.GreaterThanOrEqual, nullOrder) && Compare(testValue, upperValue, ComparisonCriteria.LessThanOrEqual, nullOrder)); case BetweenCriteria.ExcludeLower: return(Compare(testValue, lowerValue, ComparisonCriteria.GreaterThan, nullOrder) && Compare(testValue, upperValue, ComparisonCriteria.LessThanOrEqual, nullOrder)); case BetweenCriteria.ExcludeUpper: return(Compare(testValue, lowerValue, ComparisonCriteria.GreaterThanOrEqual, nullOrder) && Compare(testValue, upperValue, ComparisonCriteria.LessThan, nullOrder)); case BetweenCriteria.ExcludeBoth: return(Compare(testValue, lowerValue, ComparisonCriteria.GreaterThan, nullOrder) && Compare(testValue, upperValue, ComparisonCriteria.LessThan, nullOrder)); default: throw new InvalidOperationException(); } }
public static bool Between(this IComparable testValue, object lowerValue, object upperValue, BetweenCriteria criteria, bool nullOrder = false) { switch (criteria) { case BetweenCriteria.IncludeBoth: return(Compare(testValue, lowerValue, ComparisonCriteria.GreaterThanOrEqual, nullOrder) && Compare(testValue, upperValue, ComparisonCriteria.LessThanOrEqual, nullOrder)); case BetweenCriteria.ExcludeLower: return(Compare(testValue, lowerValue, ComparisonCriteria.GreaterThan, nullOrder) && Compare(testValue, upperValue, ComparisonCriteria.LessThanOrEqual, nullOrder)); case BetweenCriteria.ExcludeUpper: return(Compare(testValue, lowerValue, ComparisonCriteria.GreaterThanOrEqual, nullOrder) && Compare(testValue, upperValue, ComparisonCriteria.LessThan, nullOrder)); case BetweenCriteria.ExcludeBoth: return(Compare(testValue, lowerValue, ComparisonCriteria.GreaterThan, nullOrder) && Compare(testValue, upperValue, ComparisonCriteria.LessThan, nullOrder)); default: throw new InvalidOperationException(); } }