арифметика не при чем. проблема в реализации case с множественными значениями. если в в такой ветке нет break, то код ветки выполняется столько раз, сколько значений в списке
вот так работает нормально
X++:
public static void main(Args _args)
{
int i = 1;
int j = 0;
switch (i)
{
case 1:
case 2,3,4:
Info("!!");
j+=8;
break;
}
Info(int2Str(j));
}
а если убрать break, то выведет 24
а вот так вообще 32:
X++:
public static void main(Args _args)
{
int i = 1;
int j = 0;
switch (i)
{
case 1, 2,3,4:
Info("!!");
j+=8;
}
Info(int2Str(j));
}
где то слышал (так что может и вру) что в IL то ли отсутствует, то ли какая то особенная реализация fall-through - исполнения в switch веток case друг за другом если нет break. Вероятно здесь пытались как то реализовать стандартное X++ поведение switch на особенностях IL и малость перестарались/недосарались в случае с множественными значениями