OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

Соотвествие: ошибка при обходе Для Каждого + заполнении значения

Open 240596448 opened this issue 5 years ago • 5 comments

Ошибка При обходе коллекции с типом Соотвествие в цикле Для Каждого и изменении Значения на второй итерации цикла получаем ошибку Внешнее исключение (System.InvalidOperationException): Коллекция была изменена; невозможно выполнить операцию перечисления.}

Воспроизведение ошибки

Коллекция = Новый Соответствие();
Коллекция.вставить("а");
Коллекция.вставить("б");

Для Каждого КЗ Из Коллекция Цикл // <<< ---- ЕГГОГ на втором заходе
	Коллекция[КЗ.Ключ] = "а"; 
КонецЦикла;

Коллекция.Вставить(КЗ.Ключ, "а") - ведет себя точно так же, с такой же ошибкой.

Ожидаемое поведение

  1. В 1C при таком коде ошибки нету.
  2. Если Коллекция = Новый Структура в oscript выполняется без ошибок

240596448 avatar Jun 29 '20 21:06 240596448

Я бы сказал, что это особенность реализации. Ошибку выдает .net он не любит изменения коллекций при обходе. Ну и сама идея делать подобное - сомнительна.

Я приму пулреквест, если таковой будет.

EvilBeaver avatar Jun 30 '20 12:06 EvilBeaver

@EvilBeaver ты говорил, что любой эксепшен от System - это дырка, и надо фиксить :)

nixel2007 avatar Jun 30 '20 14:06 nixel2007

Я говорил, что TargetInvocationException это дырка и надо фиксить. А скажем OutOfBounds для массива - не дырка, т.к. по сути все, что я могу сделать - это повторить данное сообщение.

В данном случае, это хоть и несоответствие поведению, но minor, поскольку разрешать такое все-таки не стоит и тратить время на попытку обмануть .NET не хочется.

Но, если рыцарь в белых доспехах придет и реализует - я буду рад.

EvilBeaver avatar Jun 30 '20 17:06 EvilBeaver

@EvilBeaver, Это только в .NET такая особенность? В других языках вроде проверяется и разделяется: значения словарей меняются без проблем, а вот изменение состава ключей - вызывает как положено ошибку.

240596448 avatar Jul 01 '20 12:07 240596448

Соответствие[Ключ] = Значение

вот это потенциально и изменение состава ключей и изменение значения, т.к. ключ может не существовать.

EvilBeaver avatar Jul 02 '20 12:07 EvilBeaver