Enum.Equals () сравнивает два перечисления для эквивалентности как по типу, так и по значению. Таким образом, законно использовать его на двух разных типах Enum. Оператор ==, с другой стороны, сравнивает числовое значение двух перечислений и предполагает , что они относятся к одному типу. Ваш первый тест не пройден, потому что Seasons и TestResult не одного типа. Последнее успешно, потому что они оба основаны на типе Enum - они просто не эквивалентны. Вы можете обойти это, если вам действительно нужно двумя разными методами.
Однако заранее я посоветую вам использовать их с осторожностью, поскольку в дальнейшем они могут вызвать всевозможные проблемы. Перечисления бывают разных типов, предположительно по причине. Отстранение от этой причины - проблема, которая порождает вопрос «Почему?». Если у вас есть законный ответ на этот вопрос, то, возможно, вам стоит обратить внимание на рефакторинг кода, чтобы сделать его ненужным .
Теперь, чтобы как-нибудь избежать неприятностей с их сравнением, я пообещал два метода. Первый по значению. Приведите оба перечисления к целым и сравните их по значению, например ((int) s2) == ((int) t) ;. По сути, это то же самое, что и использование оператора ==, за исключением того, что вы удалили тип из сравнения. Второй по смыслу - сравните само перечисление путем преобразования их обоих в строку, поэтому s2.ToString (). Equals (t.ToString ()) ;. При этом «ВЕСНА» будет сравниваться с «ПРОЙДЕНО», поэтому числовая эквивалентность больше не будет проблемой.
Если будет возможно преобразовать ваши два перечисления друг в друга, то, возможно, вам следует сначала явно выполнить преобразование, а затем сравнить их. Таким образом, вы сделаете свою цель более ясной, что сделает вас намного счастливее, если вы обнаружите, что пытаетесь поддерживать этот код через пару лет. Это более актуальная работа, но она принесет дивиденды в удобочитаемости.