Предложение:
Объявление intArray как «int [] intArray» вместо «object intArray» позволит компилятору подобрать недопустимое приведение C #. Если вам абсолютно не нужно использовать объект, я бы использовал этот подход.
Re Q2, Q3:
Во время выполнения вы пробовали обернуть актерский состав в проверенный блок?
Из этой статьи на MSDN:
По умолчанию выражение, которое
содержит только постоянные значения, вызывает
ошибка компилятора, если выражение
производит значение, которое находится за пределами
диапазон типа назначения. Если
выражение содержит один или несколько
непостоянные значения, компилятор делает
не обнаружить переполнение.
...
По умолчанию эти непостоянные
выражения не проверяются на
переполнение во время выполнения либо они
не повышать исключения переполнения.
предыдущий пример отображает
-2,147,483,639 как сумма двух натуральных чисел.
Проверка переполнения может быть включена
параметры компилятора, окружение
Конфигурация, или использование проверенного
ключевое слово.
Как говорится, вы можете применять проверку переполнения более глобально через настройку компилятора или конфигурацию среды.
В вашем случае это, вероятно, желательно, так как это приведет к возникновению ошибки времени выполнения, которая гарантирует, что вероятное переполнение числа от неподписанного числа до числа со знаком не будет происходить молча.
[Обновить] После тестирования этого кода я обнаружил, что использование объявления типа объекта вместо int [], по-видимому, обходит стандартный синтаксис приведения в C # независимо от того, включен флажок или нет.
Как сказал JS, когда вы используете объект, вы связаны правилами CLI, и они, очевидно, позволяют этому происходить.
Re Q1:
Это связано с вышеизложенным. Короче говоря, поскольку приведение к действию не вызывает исключение (на основе текущей настройки переполнения). Является ли это хорошей идеей - это другой вопрос.
От MSDN :
Выражение "is" оценивается как true, если предоставленное выражение не является нулевым, и
предоставленный объект может быть приведен к предоставленному типу, не вызывая исключения
выброшены.