Показать сообщение отдельно
Старый 10.02.2019, 14:16   #355  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
арифметика не при чем. проблема в реализации 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 и малость перестарались/недосарались в случае с множественными значениями
За это сообщение автора поблагодарили: Logger (5).