2016-07-05 2 views
3

Хорошо, я наткнулся на это в некотором коде, который только что начал поддерживать сотрудник. Я никогда не делал ничего подобного и не хотел, но я был поражен тем, что компилятор не отметил это как ошибку.C# проверка типа индекса массива

В принципе вы можете увидеть «странное» поведение с этой небольшой фрагмент кода:

array[3/4] = 3;

Это допускается, даже если 3/4, я думаю, вернется в два раза. Если изменить его на:

array[3.0/4] = 3;

Вы получаете ошибку компилятора.

Я предполагаю, что первый не создает ошибку компилятора, потому что он выполняет целочисленное деление и возвращает целое число.

+0

Надеюсь, вы измените этот код. (Я предполагаю, что исходный код использует переменные, а не жестко закодированные 3/4.) Это приглашение для ошибок. Мне жаль, что я не увижу этого. – Eli

+0

Исходный код был на самом деле этот массив [variable * 3/4], и он сделал то, что требовалось, но мне это не нравится, и я бы никогда не закодировал его сам. –

ответ

5

Да, если обе части целые - компилятор выполняет целочисленное деление. Вы получаете

3/4 = 0 

При попытке разделить двойное целое число - вы получите двойной результат, который не является допустимым индексом массива.

+3

Вы можете легко проверить с помощью этого '(3/4) .GetType()', который будет 'System.Int32'. –

Смежные вопросы