Согласно документации Microsoft (в архиве) для оператора C# ==,
Для предопределенных типов значений оператор равенства (==) возвращает true, если значения его операндов равны, и false в противном случае. Для ссылочных типов, отличных от строки, == возвращает true, если два его операнда относятся к одному и тому же объекту. Для строкового типа == сравнивает значения строк. Типы значений, определяемые пользователем, могут перегружать оператор == (см. оператор). То же самое можно сказать и о определяемых пользователем ссылочных типах, хотя по умолчанию == ведет себя так, как описано выше, как для предопределенных, так и для определяемых пользователем ссылочных типов.
(выделено мной)
Так почему же этот фрагмент кода не компилируется?
Код: Выделить всё
bool Compare(T x, T y) { return x == y; }
Оператор '==' не может быть применен к операндам типа 'T' и 'T'.
Интересно, почему, поскольку, насколько я понимаю, оператор == предопределен для всех типов.
В случае, если я использую ссылочный тип, будет ли == использует предопределенное сравнение ссылок или будет использовать перегруженную версию оператора, если он определен типом?