C# 无法在foreach循环中处置DataTable
在我的Dispose方法中,我处理数据集的所有内容,如下所示:C# 无法在foreach循环中处置DataTable,c#,collections,C#,Collections,在我的Dispose方法中,我处理数据集的所有内容,如下所示: foreach (DataTable myTable in this.Tables) { myTable.Dispose(); } 这里这个.Tables是公共DataTableCollection表{get;} 我有大约56张桌子在这里。当它接近这个电话的时候 它在少数几张桌子上运行良好,但突然抛出: System.InvalidOperationException: 集合修改错误 我不知道为什么会这样 我尝试了很多次搜
foreach (DataTable myTable in this.Tables)
{
myTable.Dispose();
}
这里这个.Tables是公共DataTableCollection表{get;}
我有大约56张桌子在这里。当它接近这个电话的时候
它在少数几张桌子上运行良好,但突然抛出:
System.InvalidOperationException:
集合修改错误
我不知道为什么会这样
我尝试了很多次搜索这个异常,但我不明白为什么它会在我的应用程序中被破坏
可能是因为穿线?或者我需要将其转换为列表?异常是因为集合在枚举时被修改。解释得很好 区别在于您正在枚举DataTableCollection,它不是泛型集合,因此链接答案中的解决方案不适用于这种情况。可以将集合强制转换为泛型集合,然后枚举它
foreach (DataTable thisTable in this.Tables.Cast<DataTable>().ToArray())
我没有从中找到答案。请打开此线程,这只是因为您正在更改要迭代的集合。因此,这并不是由于dispose,例如,在循环、移除期间,每当您修改集合时,都会出现这样的异常。是的,我知道,但tha的解决方法是什么@nikhilvartak@CoreDeveloper:链接问题的可接受答案是一种变通方法。您需要澄清吗?@CoreDeveloper要使用this.Tables.ToList等,您需要使用System.Linq;-有吗?听起来很合理:谢谢。顺便说一句,我只是用for循环尝试了一下,它没有抛出任何异常。为什么?@CoreDeveloper如果只枚举集合而不进行修改,就可以了。如果在for循环中删除集合中的项,您将得到一个异常,例如访问this.Tables[n],但实际上this.Tables现在只有不到n个项。但我并没有删除任何内容,我的意思是它只是处理而不是从列表中删除。也许我被误解了something@CoreDeveloper另一种替代解决方案是使用反向for循环,从n到0。正在处理第n项,第n-1项。。。第0项,好的,明白了。。现在我找到了解决办法,但我怎么知道它为什么会导致这种情况呢?我的意思是,我有超过10个项目相同的dll,但它失败只有一个项目。