Eine kurze generische ExtensionMethode um zu prüfen ob sich ein Wert innerhalb / ausserhalb oder auf der Grenze befindet.
public static class Extensions
{
public static RangeCheck IsInRange<T>(this T pValue, T pBorder1, T pBorder2) where T: IComparable
{
return (RangeCheck)(Math.Sign(pBorder1.CompareTo(pBorder2)) == 0 ?
Math.Abs(Math.Sign(pValue.CompareTo(pBorder1))) + 1 :
Math.Abs(Math.Sign(pValue.CompareTo(pBorder1)) + Math.Sign(pValue.CompareTo(pBorder2))));
}
}
public enum RangeCheck
{
Inside = 0,
Border = 1,
Outside = 2
}
TestCode:
private void Test()
{
int border1 = 3;
int border2 = 7;
System.Diagnostics.Debug.WriteLine("RealBorder (3-7)");
for (int value = 1; value < 10; value++)
{
System.Diagnostics.Debug.WriteLine("{0}={1}", value, value.IsInRange(border1, border2));
}
border1 = 5;
border2 = 5;
System.Diagnostics.Debug.WriteLine("EqualBorder (5)");
for (int value = 1; value < 10; value++)
{
System.Diagnostics.Debug.WriteLine("{0}={1}", value, value.IsInRange(border1, border2));
}
}
}
Ausgabe:
RealBorder 3-7
1=Outside
2=Outside
3=Border
4=Inside
5=Inside
6=Inside
7=Border
8=Outside
9=Outside
EqualBorder (5)
1=Outside
2=Outside
3=Outside
4=Outside
5=Border
6=Outside
7=Outside
8=Outside
9=Outside
Edit: herbivore hat natürlich Recht... (Math.Sign eingebaut)
Range Check IComparable Extension