我有一个List<string> AllowedList
和一个Dictionary<string,List<string>> MyDictionary
。
对于字典中的每个键,我想检查它是否在AllowedList
上,如果不是,我想从字典中删除键和值。
我直觉地尝试了这个似乎是我想要的东西:
foreach (string key in MyDictionary.Keys)
{
if (!AllowedList.Contains(key)) MyDictionary.Remove(key);
}
但是,我遇到了InvalidOperationException
:
收藏被修改;枚举操作可能无法执行。
我确信这可能是一个简单的方法,但我没有立即看到它。
答案 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