Wie vergleiche ich Werte generischer Typen?
Ich habe es auf ein Minimum reduziert:
public class Foo<T> where T : IComparable
{
private T _minimumValue = default(T);
public bool IsInRange(T value)
{
return (value >= _minimumValue); // <-- Error here
}
}
Der Fehler ist:
Der Operator '> =' kann nicht auf Operanden vom Typ 'T' und 'T' angewendet werden.
Was in aller Welt!? T
ist bereits eingeschränkt auf IComparable
, und selbst , wenn es um Wertetypen (Zwang where T: struct
), können wir immer noch nicht des Betreibers gelten <
, >
, <=
, >=
, ==
oder !=
. (Ich weiß, dass es Problemumgehungen Equals()
für ==
und gibt !=
, aber es hilft den relationalen Operatoren nicht).
Also zwei Fragen:
- Warum beobachten wir dieses seltsame Verhalten? Was hält uns davon ab , die Werte von generischen Typen zu vergleichen , die sind bekannt sein
IComparable
? Besiegt es nicht irgendwie den gesamten Zweck generischer Einschränkungen? - Wie löse ich das oder arbeite ich zumindest daran?
(Mir ist klar, dass es bereits eine Handvoll Fragen zu diesem scheinbar einfachen Problem gibt - aber keiner der Threads gibt eine erschöpfende oder praktikable Antwort, also hier.)