Trivial but useful extension method

Don’t know why I didn’t write this before; it makes code very readable. Often when you write anything graphics related, you want to constrain coordinates to window edges (for example).

So a simple method:

    1: /// <summary>
    2: /// Ensure that the given number falls within the
    3: /// given min/max constraints.
    4: /// </summary>
    5: public static double Constrain( this double num,
    6:                         double min, double max )
    7: {
    8:     if (num < min)
    9:         return min;
   10:     else if (num > max)
   11:         return max;
   12:     else
   13:         return num;
   14: }

It’s just a Floor combined with a Ceiling, but it reads nicely:

    1: xform.X = dx.Constrain(-this.ActualWidth, 0 );
    2: xform.Y = dy.Constrain(-this.ActualHeight, 0 );

 

Avi

Comments

  • Anonymous
    September 29, 2008
    Nice, but why not make it generic?public static T Constrain<T>(this T value, T min, T max) where T : IComparable<T>{ if (value.CompareTo(min)<0)   return min; else if (value.CompareTo(max)>0)   return max; else   return value;}
  • Anonymous
    September 29, 2008
    Yep, even better!
  • Anonymous
    September 04, 2009
    "It’s just a Floor combined with a Ceiling, but it reads nicely:" Your code dosen't read like that, whythe ifs? public static int Constraint(this int value, int min, int max) { return Math.Min(Math.Max(value,min), max); }