C#でDictionaryから複数の要素を一括で削除する

C#でDictionaryから同時に複数の条件を削除したい時にDictionaryに、そういった機能が無いため拡張メソッドを作成しました。

Dictionaryの宣言

以下のように Dictionary を宣言していたとします。

var table = new Dictionary<string, string>()
{
    { "1", "1" },
    { "2", "2" },
    { "3", "3" },
    { "4", "4" },
};

一括で削除するために拡張メソッドを宣言

Dictionaryの拡張メソッドとして以下を宣言します。

public static class DictionaryExtension
{
    public static void Remove<TKey, TValue>(this Dictionary<TKey, TValue> source, Func<TKey, bool> cond)
    {
        IEnumerable<TKey> keys = source.Keys.Where(cond).ToArray();
        foreach (var item in keys)
        {
            source.Remove(item);
        }
    }
}

TKey と TValue は Dictionary のクラスに宣言されているのでそのまま使用します。

使い方

使い方は以下の通りです。普通にRemoveメソッドの2番目としてIDEに表示されて、System.Linq のほかの拡張メソッドのように使用できます。

table.Remove(key => key == "1" || key == "2");