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