Это почти наверняка оптимизация. Код платформы .NET довольно религиозен в отношении проверки аргументов, позволяющих программисту попасть в пропасть успеха. Но это не бесплатно. Стоимость довольно незначительна, многие методы класса занимают гораздо больше машинных циклов, чем тратится на проверку.
Но массивы особенные. Они являются основной структурой данных в структуре. Почти каждый класс коллекции построен поверх них. Любые накладные расходы, помещаемые в класс Array, напрямую влияют на эффективность большого количества кода, который стоит над ним. Во избежание проверки все в порядке, в любом случае она неявно проверяется, когда внутренний код должен преобразовать значение в unsigned. И это очень редко, что это спотыкается. Поэтому проверка дважды не стоит лучшего сообщения об исключении.