Ответ 1
Это зависит от того, в каком контексте вы находитесь. Если вы используете контекст checked
, вы получите исключение. Соответствующий раздел спецификации - раздел 6.2.1:
Для преобразования из float или double в интегральный тип обработка зависит от контекста проверки переполнения (§7.6.12), в котором происходит преобразование:
- В проверенном контексте преобразование происходит следующим образом:
- Если значение операнда равно NaN или бесконечно, генерируется исключение System.OverflowException.
- В противном случае исходный операнд округляется до нуля до ближайшего целочисленного значения. Если это целочисленное значение находится в пределах диапазона назначения, то это значение является результатом преобразования.
- В противном случае выдается исключение System.OverflowException.
- В неконтролируемом контексте преобразование всегда выполняется успешно и выполняется следующим образом.
- Если значение операнда равно NaN или бесконечно, результатом преобразования является неопределенное значение типа назначения.
- В противном случае исходный операнд округляется до нуля до ближайшего целочисленного значения. Если это целочисленное значение находится в пределах диапазона назначения, то это значение является результатом преобразования.
- В противном случае результатом преобразования является неопределенное значение типа назначения.
Таким образом, в неконтролируемом контексте ответ не обязательно равен 0 - это неопределенное значение int
. Фактически, в моем тестировании он появляется как int.MinValue
, а не 0 в неконтролируемом контексте.
Но в принципе, если вы хотите сделать проверку, используйте проверенный контекст (по крайней мере для этого выражения).