У меня есть следующий фрагмент кода, который дает мне проблемы, и я был бы признателен за любую помощь:Ошибки с Foreach цикл по списку
private static string CreateOptionString(List<VehicleOption> Options)
{
StringBuilder returnValue = new StringBuilder();
foreach (VehicleOption option in Options)
{
if (option.OptionStatus == ExtendedResponse.OptionState.Included)
{
if (returnValue.Length > 0)
{
returnValue.Append(", ");
}
returnValue.Append(option.OptionName);
}
}
return returnValue.ToString();
}
Моя первоначальная проблема заключалась в том, что я получал System.InvalidOperationException: сбор была изменена ошибка в моем цикле foreach.
1) Я все еще не могу понять, почему я получил бы эту ошибку, потому что я не вижу, чтобы она была изменена.
Кто-то предложил мне скопировать список в новый список и пропустить новый список. Я сделал это и избавился от InvalidOperationException. Тем не менее, я попытался переписать список 2 разными способами, и оба дали мне System.ArgumentException: массив назначения был недостаточно длинным. Вот два пути я пытался скопировать список
List<VehicleOption> newOptions = new List<VehicleOption>(Options);
и
List<VehicleOption> newOptions = new List<VehicleOption>();
newOptions.AddRange(Options);
Оба эти дали мне System.ArgumentException: массив назначения не было достаточно долго.
2) Почему любой из этих методов дал мне это исключение?
Любая помощь будет оценена, потому что я в тупике.
Спасибо!
Как называется CreateOptionString? Вы уверены, что ничто не изменяет List вне этого метода? Вы также можете сделать List newList = новый список (Options.ToArray()); чтобы попытаться скопировать элементы в новый список. –
dash
Возможно, «Опции» модифицированы из другого потока во время 'foreach'. –
В каком контексте это? ASP.NET? WCF? WinForms? –