您收到异常是因为您正在尝试修改集合
myList.Remove(s);
您不能修改您在foreach
循环中迭代的列表。见foreach - MSDN
foreach 语句为实现 System.Collections.IEnumerable 或 System.Collections.Generic.IEnumerable(Of T) 接口的数组或对象集合中的每个元素重复一组嵌入语句。foreach 语句用于遍历集合以获取您想要的信息,但不能用于从源集合中添加或删除项目以避免不可预知的副作用。如果您需要从源集合中添加或删除项目,请使用 for 循环。
对于您的问题:
问题是,每当我使用 'comp == 1' 时,我都没有例外
因为那样它没有通过检查并且列表保持不变。
我不知道您为什么使用string.Compare
,因为您似乎正在检查是否相等。
你可以简单地做:
myList = myList.Where(r=> r != line_to_delete).ToList();
如果您尝试使用string.Compare
以便可以执行不区分大小写的比较,请查找string.Equals重载,它也将StringComparison
enum 用于不区分大小写的比较。
myList = myList
.Where(r => r.Equals(line_to_delete, StringComparison.InvariantCultureIgnoreCase))
.ToList();