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