Почему оператор == нельзя применить к универсальным типам в C#?C#

Место общения программистов C#
Anonymous
Почему оператор == нельзя применить к универсальным типам в C#?

Сообщение Anonymous »

Примечание: документация по == с тех пор была изменена и полностью переписана после того, как был задан этот вопрос. В документации больше нет этой цитаты. Кроме того, реализация ниже возможна начиная с C# 11 благодаря добавленной поддержке общих математических вычислений.
Согласно документации Microsoft (в архиве) для оператора C# ==,

Для предопределенных типов значений оператор равенства (==) возвращает true, если значения его операндов равны, и false в противном случае. Для ссылочных типов, отличных от строки, == возвращает true, если два его операнда относятся к одному и тому же объекту. Для строкового типа == сравнивает значения строк. Типы значений, определяемые пользователем, могут перегружать оператор == (см. оператор). То же самое можно сказать и о определяемых пользователем ссылочных типах, хотя по умолчанию == ведет себя так, как описано выше, как для предопределенных, так и для определяемых пользователем ссылочных типов.

(выделено мной)
Так почему же этот фрагмент кода не компилируется?

Код: Выделить всё

bool Compare(T x, T y) { return x == y; }
Я получаю сообщение об ошибке.

Оператор '==' не может быть применен к операндам типа 'T' и 'T'.

Интересно, почему, поскольку, насколько я понимаю, оператор == предопределен для всех типов.
В случае, если я использую ссылочный тип, будет ли == использует предопределенное сравнение ссылок или будет использовать перегруженную версию оператора, если он определен типом?

Вернуться в «C#»