在迭代时从Hashtable中删除条目是否安全?

时间:2014-04-17 12:31:51

标签: c# .net dictionary

换句话说,这样安全吗?

Hashtable myDict = ... //fill with some data

foreach (DictionaryEntry pair in myDict)
{
   if (someCondition)
       myDict.Remove(pair.Key);
}

到目前为止,我的应用程序似乎没有任何副作用。

编辑:我必须提一下,在我的具体情况下,这个字典只包含一个条目。

edit2:抱歉,数据类型是Hashtable而不是字典。

3 个答案:

答案 0 :(得分:7)

不,它不安全,如果在创建枚举数后修改了基础集合,IEnumerator specifies that MoveNext的合同应抛出异常。

答案 1 :(得分:1)

不,这不安全。对于每个被删除的条目,它将减少索引号并且将随着当前索引no增加而移动到下一个元素,因此它将在那里产生问题。

答案 2 :(得分:0)

@Lee给了你答案。

这样安全:

var toDelete = myDict.Where(someCondition).ToArray();
foreach (DictionaryEntry pair in toDelete)
    myDict.Remove(pair.Key);