2

我有procedure我想根据特定条件从字典中删除值的地方(将键值与另一个字典进行比较)

然而,在foreach loop我不允许修改字典。

有没有更好的方法来做到这一点?

键值是字符串,

foreach (var archive in dictArchivedTitles)
{
       foreach (var kvp in dictAllTheFiles)
       {
           if (kvp.Key == archive.Key)
           {
               dictAllTheFiles.Remove(kvp.Key);
           }
       }
  }
4

4 回答 4

7

您可以执行以下操作。

foreach (var archive in dictArchivedTitles)
{
    if(dictAllTheFiles.ContainsKey(archive.Key)
        dictAllTheFiles.Remove(archive.Key);
}
于 2013-05-06T12:14:34.047 回答
3

如果在这些嵌套循环中只需要删除已归档标题的键,这将更有效和可读(恕我直言):

dictAllTheFiles = dictAllTheFiles.Keys.Except(dictArchivedTitles.Keys)
    .ToDictionary(key => key);

请注意,您需要添加using System.Linq;

于 2013-05-06T12:21:36.633 回答
3

Change

foreach (var kvp in dictAllTheFiles)

to

foreach (var kvp in dictAllTheFiles.ToList())

That way you would work on a copy of dictAllTheFiles

于 2013-05-06T12:15:44.140 回答
2

如果您不想修改任一字典并访问 LINQ,您可以这样做:

var nonMatchingEntries = 
    dictAllTheFiles.Where(kv => !dictArchivedTitles.ContainsKey(kv.Key));
于 2013-05-06T12:22:33.627 回答