Mercurial > silverbladetech
view MetroWpf/MetroWpf.Framework/Extensions/ComparableExtensions.cs @ 109:11994ccdc50b
First wave of tests complete
author | stevenhollidge <stevenhollidge@hotmail.com> |
---|---|
date | Sun, 06 May 2012 20:37:32 +0100 |
parents | 060f02cd4591 |
children |
line wrap: on
line source
using System; using System.Collections.Generic; namespace MetroWpf { /// <summary> /// Extension methods for all comparable objects eg. string, DateTime, numeric values ... /// </summary> public static class ComparableExtensions { /// <summary> /// Determines whether the specified value is between the the defined minimum and maximum range (including those values). /// </summary> /// <typeparam name="T"></typeparam> /// <param name="value">The value.</param> /// <param name="minValue">The minimum value.</param> /// <param name="maxValue">The maximum value.</param> /// <returns> /// <c>true</c> if the specified value is between min and max; otherwise, <c>false</c>. /// </returns> /// <example> /// var value = 5; /// if(value.IsBetween(1, 10)) { /// // ... /// } /// </example> public static bool IsBetween<T>(this T value, T minValue, T maxValue) where T : IComparable<T> { return IsBetween(value, minValue, maxValue, null); } /// <summary> /// Determines whether the specified value is between the the defined minimum and maximum range (including those values). /// </summary> /// <typeparam name="T"></typeparam> /// <param name="value">The value.</param> /// <param name="minValue">The minimum value.</param> /// <param name="maxValue">The maximum value.</param> /// <param name="comparer">An optional comparer to be used instead of the types default comparer.</param> /// <returns> /// <c>true</c> if the specified value is between min and max; otherwise, <c>false</c>. /// </returns> /// <example> /// var value = 5; /// if(value.IsBetween(1, 10)) { /// // ... /// } /// </example> public static bool IsBetween<T>(this T value, T minValue, T maxValue, IComparer<T> comparer) where T : IComparable<T> { comparer = comparer ?? Comparer<T>.Default; var minMaxCompare = comparer.Compare(minValue, maxValue); if (minMaxCompare < 0) { return ((comparer.Compare(value, minValue) >= 0) && (comparer.Compare(value, maxValue) <= 0)); } else if (minMaxCompare == 0) { return (comparer.Compare(value, minValue) == 0); } else { return ((comparer.Compare(value, maxValue) >= 0) && (comparer.Compare(value, minValue) <= 0)); } } } }