Тип литерала без суффикс m
равен double
- это так просто.Вы также не можете инициализировать float
таким способом:
float x = 10.0; // Fail
Тип литерала должен быть понятен из самого литерала, а тип переменной, которой он назначен, должен быть назначен на с тип этого литерала.Итак, ваш второй пример работает, потому что есть неявное преобразование из int
(тип литерала) в decimal
.Не существует неявного преобразования из double
в decimal
(поскольку это может привести к потере информации).
Лично я бы предпочел его, если бы было нет по умолчанию или если бы по умолчаниюбыл decimal
, но это другое дело ...