Я подозреваю, что это на самом деле ошибка компилятора.
Вот короткая, но полная программа, показывающая, почему я так думаю:
using System;
class Test
{
static void Main()
{
decimal constant = decimal.MaxValue / 10m;
decimal calculated = decimal.MaxValue;
calculated /= 10m;
Console.WriteLine (constant);
Console.WriteLine (calculated);
}
}
Выход:
7922816251426433759354395034
7922816251426433759354395033.5
Я покопаюсь в спецификации, чтобы посмотреть, какие гарантии даются.
РЕДАКТИРОВАТЬ: В спецификации, раздел 7.18 утверждает:
Оценка времени компиляции
константные выражения используют то же самое
правила как оценка времени выполнения
непостоянные выражения, за исключением того, что
где оценка во время выполнения будет иметь
выдал исключение, время компиляции
оценка вызывает ошибку во время компиляции
произойти.
Это явно не тот случай. Хм.
РЕДАКТИРОВАТЬ: Я отправил ошибку в Microsoft Connect . Посмотрим, что с этим будет.