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如何知道迭代集合已修改?_C#_Foreach - Fatal编程技术网

C# foreach如何知道迭代集合已修改?

C# foreach如何知道迭代集合已修改?,c#,foreach,C#,Foreach,当我用foreach修改我正在迭代的集合时,我得到了一个异常。所以我只是好奇foreach(或运行时)是如何检测到这一点的。是否可以对常规对象执行此操作?集合本身必须检测它。在标准库集合中,这是通过拥有一个内部版本号来实现的,该版本号通过每次操作进行修改,并在每次迭代时由迭代器进行检查(即,每次调用MoveNext时,它都会检查版本号是否与创建迭代器时相同)。我不确定C#,但在Java世界中,foreach构造只是普通迭代器的语法粘合剂。。。因此,若在迭代期间修改集合,则会抛出Concurren

当我用
foreach
修改我正在迭代的集合时,我得到了一个异常。所以我只是好奇foreach(或运行时)是如何检测到这一点的。是否可以对常规对象执行此操作?

集合本身必须检测它。在标准库集合中,这是通过拥有一个内部版本号来实现的,该版本号通过每次操作进行修改,并在每次迭代时由迭代器进行检查(即,每次调用
MoveNext
时,它都会检查版本号是否与创建迭代器时相同)。

我不确定C#,但在Java世界中,foreach构造只是普通迭代器的语法粘合剂。。。因此,若在迭代期间修改集合,则会抛出ConcurrentModificationException。看来这里的情况就是这样。