Як порівняти значення загальних типів?
Я зменшив його до мінімальної вибірки:
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? Хіба це якось не перемагає всієї мети загальних обмежень? - Як я можу це вирішити, або, принаймні, обійти це?
(Я усвідомлюю, що вже є кілька питань, пов’язаних із цією, здавалося б, простою проблемою - але жодна з тем не дає вичерпної або дієвої відповіді, тому тут.)