Вы не можете.
Ну, конечно, вы могли бы , однако int (System.Int32) недостаточно велик, чтобы содержать все возможные десятичные значения.
Это означает, что если вы приведете десятичное число, которое больше, чем int.MaxValue, вы переполнитесь, а если десятичное число будет меньше, чем int.MinValue, оно опустится.
Что происходит, когда вы находитесь под / переполнение? Одна из двух вещей. Если ваша сборка не проверена (т. Е. CLR не имеет значения, если вы это сделаете), ваше приложение продолжит работу после того, как значение превысило / понизило значение, но значение в int не будет тем, что вы ожидали. Это может привести к периодическим ошибкам и может быть трудно исправить. В конечном итоге ваше приложение окажется в неизвестном состоянии, что может привести к повреждению вашего приложения какими-либо важными данными, над которыми он работает. Не хорошо.
Если ваша сборка проверена (свойства-> build-> advanced-> проверка на арифметическое переполнение / недополнение или параметр / checked компилятора), ваш код выдаст исключение, когда произойдет недополнение / переполнение. Это, вероятно, лучше, чем нет; однако по умолчанию для сборок не проверяется наличие избыточного / недостаточного заполнения.
Настоящий вопрос - "что ты пытаешься сделать?" Не зная ваших требований, никто не может сказать вам, что вы должны сделать в этом случае, кроме очевидного: НЕ ДЕЛАЙТЕ ЭТОГО.
Если вам конкретно все равно, ответы здесь действительны. Тем не менее, вы должны сообщить ваше понимание того, что может произойти переполнение, и что это не имеет значения, обернув ваш приведенный код в непроверенный блок
unchecked
{
// do your conversions that may underflow/overflow here
}
Таким образом, люди, идущие за вами, понимают, что вам все равно, и если в будущем кто-то изменит ваши сборки на / checked, ваш код не будет неожиданно ломаться.
Если все, что вам нужно сделать, это отбросить дробную часть числа, оставив неотъемлемую часть, вы можете использовать Math.Truncate.
decimal actual = 10.5M;
decimal expected = 10M;
Assert.AreEqual(expected, Math.Truncate(actual));