Як порівняти значення загальних типів?
Я зменшив його до мінімальної вибірки:
public class Foo<T> where T : IComparable
{
private T _minimumValue = default(T);
public bool IsInRange(T value)
{
return (value >= _minimumValue); // <-- Error here
}
}
Помилка:
Оператор '> =' не можна застосувати до операндів типу 'T' і 'T'.
Що на землі !? T
вже змушений IComparable
, і навіть тоді , коли обмежує його до типам значень ( where T: struct
), ми можемо не застосовувати будь - якого з операторів <
, >
, <=
, >=
, ==
або !=
. (Я знаю, що обхідні шляхи, що стосуються, Equals()
існують для ==
і !=
, але це не допомагає для реляційних операторів).
Отже, два запитання:
- Чому ми спостерігаємо цю дивну поведінку? Що утримує нас від порівняння значень загальних типів , які відомі як
IComparable
? Хіба це якось не перемагає всієї мети загальних обмежень? - Як я можу це вирішити, або, принаймні, обійти це?
(Я усвідомлюю, що вже є кілька питань, пов’язаних із цією, здавалося б, простою проблемою - але жодна з тем не дає вичерпної або дієвої відповіді, тому тут.)