Zu Prüfen, ob ein Wert zwischen zwei anderen Werten liegt, kann sehr schwierig sein. Besonders wenn noch Dinge wie negative Werte, Toleranzen und andere Dinge mit einfließen. In diesem Blog-Post möchte ich euch eine generische Methode vorstellen, welche es ermöglicht genau dies zu prüfen. Wir machen uns hierfür die Implementierung der Comparer-Methode des .NET-Frameworks zunutze. Außerdem erfolgt die Implementierung als Typerweiterung.
Schauen wir uns also zunächst einmal die Implementierung hierzu an. Diese würde ich wie folgt vorschlagen:
public static bool IsInRange<T>(this T item, T start, T end) { return (Comparer<T>.Default.Compare(item, start) >= 0 && Comparer<T>.Default.Compare(item, end) <= 0) || (Comparer<T>.Default.Compare(item, start) <= 0 && Comparer<T>.Default.Compare(item, end) >= 0); }
Nun kann, insofern der Namespace referenziert ist, auf den meisten Typen die Methode „IsInRange“ aufgerufen werden. Aufzurufen wäre diese Methode zum Beispiel wie folgt (Beispiel mit Toleranz Implementierung):
double value = 123.45; double tolerance = 0.001; bool valid = (value * (1 + tolerance)).IsInRange(111.11, 222.22);
Ich hoffe auch dies konnte dem ein oder anderen wieder weiterhelfen.