在给定要删除的键列表的情况下从字典中删除键,值对

时间:2012-10-09 19:34:33

标签: c#-4.0 dictionary

我有一个List<string> AllowedList和一个Dictionary<string,List<string>> MyDictionary

对于字典中的每个键,我想检查它是否在AllowedList上,如果不是,我想从字典中删除键和值。

我直觉地尝试了这个似乎是我想要的东西:

foreach (string key in MyDictionary.Keys)
{
    if (!AllowedList.Contains(key)) MyDictionary.Remove(key);
}

但是,我遇到了InvalidOperationException

  

收藏被修改;枚举操作可能无法执行。

我确信这可能是一个简单的方法,但我没有立即看到它。

2 个答案:

答案 0 :(得分:9)

您可以使用Enumerable.Except查找字典中没有的键:

foreach (var key in MyDictionary.Keys.Except(AllowedList).ToList())
    MyDictionary.Remove(key);

ToList()创建一个新的设置差异列表并阻止异常。

答案 1 :(得分:1)

您可以/应该将要删除的密钥存储在临时列表中,然后在之后执行所有删除操作。

List<TKey> templist = new List<TKey>();

foreach (var x in MyDictionary)
{
    if (!AllowedList.Contains(x.Key))
        templist .Add(x.Key);
}
foreach (TKey item in templist )
{
    MyDictionary.Remove(item);
}

这也可能有用: How to delete entries from a dictionary using the value