Skip to content

Instantly share code, notes, and snippets.

@kuchikios
Created April 23, 2015 07:55
Show Gist options
  • Save kuchikios/48bf99709df32a397774 to your computer and use it in GitHub Desktop.
Save kuchikios/48bf99709df32a397774 to your computer and use it in GitHub Desktop.
Clamp
/// <summary>
/// <paramref name="value"/>を<paramref name="min"/>以上<paramref name="max"/>以下に修正した値を返します
/// </summary>
/// <typeparam name="TValue"><paramref name="value"/>の比較に使用される、<see cref="IComparable"/>を継承する型</typeparam>
/// <param name="value">比較値</param>
/// <param name="min">下限値</param>
/// <param name="max">上限値</param>
/// <returns><paramref name="value"/>が<paramref name="min"/>より小さい場合は<paramref name="min"/>、<paramref name="value"/>が<paramref name="max"/>より大きい場合は<paramref name="max"/>、それ以外の場合は<paramref name="value"/></returns>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="max"/>は<paramref name="min"/>よりも大きい必要があります</exception>
public static TValue Clamp<TValue>( this TValue value, TValue min, TValue max )
where TValue : IComparable<TValue>
{
if ( 0 > max.CompareTo( min ) ) throw new ArgumentOutOfRangeException( "max", "max < min" );
{
return 1 > value.CompareTo( max ) ? value.CompareTo( min ) > -1 ? value : min : max;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment