Prüfen, ob ein Wert sich zwischen zwei anderen Werten befindet

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.