System.InvalidOperationException: коллекция была изменена; операция перечисления может не выполняться для ImmutableDictiC#

Место общения программистов C#
Ответить
Anonymous
 System.InvalidOperationException: коллекция была изменена; операция перечисления может не выполняться для ImmutableDicti

Сообщение Anonymous »

У меня есть функция, которая неоднократно вызывается через поток. Иногда это исключение вызывается случайным образом.

Код: Выделить всё

 System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at System.String.Join[T](String separator, IEnumerable`1 values)
at FormatLoDestStatus(ImmutableDictionary`2 loDestStatus)
in C:\Formatter.cs:line 117
Вызываемая функция:

Код: Выделить всё

  public string FormatLoDestStatus(ImmutableDictionary loDestStatus)
{
List result = new List();
foreach (var status in loDestStatus)
{
string value = string.Join(",", status.Value).TrimEnd();
var formatted = $"{status.Key}S{value}";  // This is place where it gives invalid operation
if (Regex.IsMatch(formatted, _patternCollection.LoDestStatusPattern)
&&
Regex.IsMatch(value, _patternCollection.UnAvailableLevelsPattern))
{
result.Add(formatted);
}
}

return string.Join(":", result);
}
Я преобразовал loDestStatus из Dictionary в ImmutableDictionary, но все равно это случайно выдает исключение в строке, которую я упомянул в коде, где я применяю string.Join(",", status.Value).TrimEnd();
Что на самом деле происходит не так и как я могу это решить? (Я предполагаю, что если у меня есть ImmutableDictionary, он потокобезопасен, и исходный неизменяемый словарь loDestStatus не должен быть изменен).

Подробнее здесь: https://stackoverflow.com/questions/789 ... -operation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»