Q:

Можно ли проверить наличие у типа реализованных операторов сравнения?

Дано: Обобщенный метод использующий сравнения элементов в своей работе.
Необходимо: обеспечить контроль на этапе компиляции, что в качестве параметра типа, передан тип реализующий операторы сравнения.
Очевидный вариант сделать так:
void SomeMethod<T>(T a, T b) where T:IComparable<T>
{
    if (a.CompareTo(b)>0) //Some action
    ...
}

Но такое определение гарантирует только наличие метода a.CompareTo(b). Это нормально при работе со ссылочными типами, но при работе с value-типами, например int, при вызове метода, вызывает боксинг значений. Хотелось бы этого избежать, если возможно конечно.

A:

Если вас интересует возможность задать ограничение дженерика по наличию перегруженных операторов сравнения, то, боюсь, это невозможно. 
С другой стороны в приведенном вами варианте с использованием интерфейса IComparable<T> упаковки не происходит, поскольку вы используете обобщённый интерфейс, метод CompareTo которого принимает строго определённый тип, а не object. Можете проверить это, изучив сгенерированный il-код - инструкция box там не используется.  

