换句话说,这样安全吗?
Hashtable myDict = ... //fill with some data
foreach (DictionaryEntry pair in myDict)
{
if (someCondition)
myDict.Remove(pair.Key);
}
到目前为止,我的应用程序似乎没有任何副作用。
编辑:我必须提一下,在我的具体情况下,这个字典只包含一个条目。
edit2:抱歉,数据类型是Hashtable而不是字典。
答案 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);