Вероятно, это ошибка, и, вероятно, это моя вина. Извините за это.
Правильное получение десятичных преобразований было одной из самых сложных частей построения правильного кода дерева выражений в компиляторе и во время выполнения, поскольку десятичные преобразования фактически выполняются как пользовательские преобразования во время выполнения, но рассматриваются как встроенные преобразования компилятором . Десятичный является единственным типом с этим свойством, и поэтому в этих случаях в анализаторе есть все виды специального оборудования. На самом деле, в анализаторе есть метод с именем IsEnumToDecimalConversion, который обрабатывает особый случай преобразования nullable enum в nullable decimal; довольно сложный особый случай.
Скорее всего, я не учел, что какой-то случай идет другим путем, и в результате сгенерировал плохой код. Спасибо за примечание; Я отправлю это в команду тестирования, и мы посмотрим, сможем ли мы запустить репро. Хорошие шансы, что если это окажется истинной ошибкой, это не будет исправлено в первоначальном выпуске C # 4; на данный момент мы принимаем только ошибки «пользователь убит током компилятором», чтобы релиз был стабильным.