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

これらのネストされたループで既にアーカイブされたタイトルのキーを削除することだけが必要な場合、これはより効率的で読みやすいです(imho):

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

追加する必要があることに注意してくださいusing System.Linq;

于 2013-05-06T12:21:36.633 に答える
3

変化する

foreach (var kvp in dictAllTheFiles)

foreach (var kvp in dictAllTheFiles.ToList())

そうすれば、のコピーで作業できますdictAllTheFiles

于 2013-05-06T12:15:44.140 に答える