C#中foreach为什么是只读的

比如这么一段代码
Public Dictionary dic;
Foreach(var key in dic.keys)
{
Dic.remove(key);
}
是会报错的,因为foreach是只读的。
请问为什么会报错呢,希望可以得到具体解答。

foreach逻辑里不能对目标进行修改操作,当你使用foreach时,是通过迭代器对目标内容进行访问的,是一个连贯的迭代读取过程,因此不允许修改迭代内容。

foreach里面不能做remove操作,
这是因为引用类型内存地址指向的是同一内存地址,一般用for循环