5

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

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

我凭直觉尝试了这似乎是我想要的:

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

但是,我遇到了一个InvalidOperationException

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

我确信可能有一个简单的方法可以解决这个问题,但我没有立即看到它。

4

2 回答 2

9

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

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

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

于 2012-10-09T19:47:00.530 回答
1

您可以/应该将要删除的键存储在临时列表中,然后在额外的 for 循环中进行所有删除。

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);
}

这也可能有帮助: 如何使用值从字典中删除条目

于 2012-10-09T19:41:53.957 回答