У вас есть
io.zipkin.reporter2:zipkin-reporter:jar:2.2.0:compile (version managed from 2.7.14)
Это означает, что в вашем POM или Parent POM есть запись <dependencyManagement>
, которая устанавливает версию на 2.2.0
.
Невозможно изменить коллекцию, пока вы перечисляете ее в .Net. Вы должны разделить свое перечисление и удалить код в разные блоки. Вот краткий пример того, как это сделать без LINQ
protected void btnAdd_Click(object sender, EventArgs e)
{
var selected = new List<ListItem>();
foreach (ListItem item in lstAvailableColors.Items)
{
if (item.Selected)
{
selected.Add(item);
lstSelectedColors.Items.Add(item);
}
}
foreach (ListItem item in selected)
{
lstAvailableColors.Items.Remove(item);
}
}
. А вот более краткая версия с использованием LINQ
var selected = lstAvailableColors.Cast<ListItem>().Where(i => i.Selected).ToList();
selected.ForEach( x => { lstSelectedColors.Items.Add(x); });
selected.ForEach( x => { lstAvailableColors.Items.Remove(x);});
EDIT
. Версия LINQ работает в двух частях. Первая часть - это первая строка, которая находит текущие выбранные элементы и сохраняет значение в List
. Очень важно, чтобы в строке содержался вызов .ToList (), потому что это заставляет запрос выполняться немедленно, а не с задержкой выполнения.
Следующие две строки перебирают каждое выбранное значение и удаляют или добавляют его в соответствующий список. Поскольку выбранный список уже сохранен, мы больше не перечисляем коллекцию при ее изменении.
Вы не можете изменить коллекцию, пока используете Enumerator для этой коллекции, что делает для каждого оператора.
Вы должны зацикливать данные с помощью цикла for, а затем вы Можно изменить коллекцию, но вы должны быть осторожны, чтобы правильно обновить текущий индекс, если вы вставляете или удаляете элементы. Если вы просто добавляете или удаляете элементы и не вставляете их, то итерация от последнего элемента к первому подойдет.
protected void btnAdd_Click(object sender, EventArgs e)
{
for (Int32 i = lstAvailableColors.Items.Count; i >= 0; i--)
{
ListItem item = lstAvailableColors.Items[i];
if (item.Selected)
{
lstSelectedColors.Items.Add(item);
lstAvailableColors.Items.Remove(item);
}
}
}
Как уже упоминалось в другом ответе, вы не можете удалять элементы, пока не завершите итерацию. Поэтому, возможно, что-то подобное будет для вас наиболее чистым:
var itemsToRemove =
lstAvailableColors.Items.Cast<ListItem>().Where(i => i.IsSelected).ToArray();
foreach(ListItem item in itemsToRemove) lstAvailableColors.Remove(item);
Вы не можете изменять коллекцию, для которой вы выполняете итерацию. В общем, хорошим решением для этого типа проблемы является создание пустой коллекции, и в вашем итераторе скопируйте все элементы, которые вы НЕ хотите удалять; после завершения итерации замените исходную коллекцию новой.
Вы не можете изменять коллекцию, пока выполняете ее. Или переберите копию или используйте для, переберите в обратном порядке и удалите, когда вы спуститесь.