Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在foreach循环中处置DataTable_C#_Collections - Fatal编程技术网

C# 无法在foreach循环中处置DataTable

C# 无法在foreach循环中处置DataTable,c#,collections,C#,Collections,在我的Dispose方法中,我处理数据集的所有内容,如下所示: foreach (DataTable myTable in this.Tables) { myTable.Dispose(); } 这里这个.Tables是公共DataTableCollection表{get;} 我有大约56张桌子在这里。当它接近这个电话的时候 它在少数几张桌子上运行良好,但突然抛出: System.InvalidOperationException: 集合修改错误 我不知道为什么会这样 我尝试了很多次搜

在我的Dispose方法中,我处理数据集的所有内容,如下所示:

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,但它失败只有一个项目。