Mercurial > silverbladetech
diff Chronosv2/source/Extensions/ComparableExtensions.cs @ 10:443821e55f06
Initial cleaned up add from Codeplex files
author | stevenh7776 stevenhollidge@hotmail.com |
---|---|
date | Tue, 21 Feb 2012 17:25:44 +0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Chronosv2/source/Extensions/ComparableExtensions.cs Tue Feb 21 17:25:44 2012 +0700 @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; + +namespace Chronos.Extensions +{ + /// <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)); + } + } + } +} \ No newline at end of file