2016-09-22 3 views
1

Ich schrieb eine generische Erweiterungsmethode, um zu sehen, ob ein Schlüssel in einem bestimmten Bereich ist:Was bestimmt, ob ich die Vergleichsoperatoren verwenden kann?

public static bool IsInRange(this Key key, Key lowerBoundKey, Key upperBoundKey) 
{ 
    return lowerBoundKey <= key && key <= upperBoundKey; 
} 

Das scheint einfach genug, aber ich nehme an eine generische Methode äquivalent schreiben mag, die mit jeder Art arbeiten, die verwendet werden können die <= Vergleichsoperator:

public static bool IsInRange(this T value, T lowerBound, T upperBound) 
{ 
    return lowerBound <= value && value <= upperBound; 
} 

Wie bewerbe ich mich where T : ISomethingIDontKnow so kann ich das kompilieren machen?

+0

Nicht sicher, aber wenn es IComparable implementieren könnte ausreichend sein – Paparazzi

+0

'wo T: IComparable' sollte genug sein, damit dies funktioniert. – Nkosi

Antwort

3

Die Konvertierung der Methode in eine generische Methode mit where T : IComparable sollte ausreichen, damit dies funktioniert.

public static bool IsInRange<T>(this T value, T lowerBound, T upperBound) 
    where T : IComparable { 

    return value != null && lowrBound != null && upperBound !=null 
      && lowerBound.CompareTo(value) <= 0 && value.CompareTo(upperBound) <= 0; 
} 
Verwandte Themen