我正在尝试使用此代码删除我的Hashtable中的所有项目
Monitor.Enter(myhasatable);
foreach (object key in myhasatable.Keys)
{
myhasatable.Remove(key.ToString());
}
Monitor.Exit(myhasatable);
我收到错误:
system.invalidoperationexception集合已修改枚举 操作可能无法执行
他们我的服务器卡住了,直到我刷新它
知道什么会导致这个问题吗?
Thnaks
答案 0 :(得分:2)
答案 1 :(得分:1)
如何做:
myhasatable.Clear():
答案 2 :(得分:1)
迭代时,您无法修改集合。请尝试拨打Clear
。
另外,尽量避免在新代码中使用Hashtable
。如果您有选择,请更喜欢使用Dictionary<TKey, TValue>
。
您的服务器死锁,因为之前在该行上抛出异常时未达到Monitor.Exit
。您可以通过将该代码放在finally块中来解决此问题。但是,我建议您使用Monitor
而不是使用lock
,因为即使存在异常,它也会自动为您释放锁定。
通过所有这些更改,您的代码变得更加简单:
lock (dict)
{
dict.Clear();
}