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