Я получаю InvalidOperationException
при повторении следующего цикла.
foreach (LetterPoint word in NonIntersectingWordsLocations) {
if (IntersectingWordsLocations.Any(item => item.Position.X == word.Position.X && item.Position.Y == word.Position.Y && item.Letter == word.Letter)) {
NonIntersectingWordsLocations.Remove(word);
}
}
В этой точке кода IntersectingWordsLocations
содержит всего 12
элементов, а NonIntersectingWordLocations
содержит всего 57
элементов. Оба списка содержат НЕТ недопустимых или нулевых элементов.
Один из этих элементов списка выглядит в списке следующим образом: {(LETTER:R, POSITION:(X:1Y:2))}
Вот класс, который я использую для списка...
LetterPoint.cs
public class LetterPoint : LetterData<Point>, IEquatable<LetterPoint> {
public Point Position {
get { return Item; }
set { Item = value; }
}
public LetterPoint(char c = ' ', int row = 0, int col = 0) {
Letter = c;
Position = new Point(row, col);
}
public string PositionToString => $"(X:{Item.X}Y:{Item.Y})";
public override string ToString() => $"(LETTER:{Letter}, POSITION:{PositionToString})";
// TO USE THE .COMPARE FUNCTION IN THE MAIN FILE
public bool Equals(LetterPoint other) => Letter == other.Letter && Position == other.Position;
}
Почему я получаю эту ошибку?
EDIT: Сообщение об ошибке, которое я получаю, это...
Произошло необработанное исключение типа «System.InvalidOperationException» в mscorlib.dll.
Дополнительная информация: Коллекция изменена; операция перечисления может не выполняться.
for
, вы также можете использоватьList.RemoveAll(Predicate<T>)
для удаления элементов. Если это не список, а реализуетIList<T>
, используйте цикл for и выполните итерацию в обратном направлении (от последнего элемента). - person Groo   schedule 03.08.2016