Чтобы ответить на ваш другой вопрос, (int) - это приведение, которое в действительности отличается от преобразования (Convert.ToInt32).
В приведении типа вы как бы говорите, что объект, который будет приведен, действительно относится к тому типу, к которому вы приводите, поэтому никакого реального преобразования / анализа не выполняется. Поскольку int не может быть нулевым, приведение недействительно, если объект, который вы приводите, имеет значение null, и генерируется исключение.
С преобразованием происходит некоторый фактический синтаксический анализ и логика, и он обрабатывает ситуацию, когда преобразуемый объект является нулем.
Подробнее об этом здесь .