避免错误“在枚举器实例化后修改了集合” 在循环访问Request.ServerVariables.Keys集合之前,我发现了一些使用以下行的建议:
IEnumerator en = Request.ServerVariables.Keys.GetEnumerator();
en.MoveNext();
查看MSDN example,他们将服务器变量设置为集合,然后在不调用GetEnumerator或MoveNext的情况下遍历该集合。
两个问题:
答案 0 :(得分:6)
您也可以使用:
string[] keys = Request.ServerVariables.AllKeys;
foreach(string key in keys )
{
if(Request.ServerVariables[key] != null)
{
string value = Request.ServerVariables[key];
}
}
答案 1 :(得分:2)
您可以做的是从服务器变量创建一个新集合:
foreach(var key in Request.ServerVariables.AllKeys.ToList())
{
var value = Request.ServerVariables[key];
...
}
ToList()扩展方法将使用这些项创建一个新的List。如果更改ServerVariables集合,则不会更改正在迭代的集合(因为它是一个新集合)。
希望它有所帮助。
修改强>
回答你的问题: 1-这些方法用于迭代集合。是管理迭代的框架方式。如果你可以迭代,你可以使用foreach。 2-最好的方法是使用foreach,因为它比使用enumerables更具可读性。
答案 2 :(得分:0)
当您为回发数据的控件设置"Collection was modified after the enumerator was instantiated."
时,您可能会收到EnableViewState="False"
错误。