我在迭代以下循環時收到InvalidOperationException
。爲什麼此代碼在循環列表時拋出'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;
}
爲什麼我收到這個錯誤?
編輯: 我收到該錯誤消息是..
類型的未處理的異常 'System.InvalidOperationException' 出現在mscorlib.dll
其他信息:集合已修改;枚舉操作 可能不會執行。
你的意思是這個異常消息,它告訴你*特別說明你在迭代時不允許修改集合嗎? (不是我們「知道」這個,因爲你沒有在問題中包含錯誤的文本) –
雖然鏈接的答案解釋瞭如何使用for循環來做,但是你也可以使用List.RemoveAll(Predicate)'刪除項目。如果它不是列表,但實現了'IList ',則使用for循環並向後迭代(從最後一個元素開始)。 –
Groo