Subscribe内で他のDictionaryをClearしたら変な挙動になった

protected Dictionary<eFilter, List<Item>> ItemMap = new Dictionary<eFilter, List<Item>>();
public ReactiveProperty<List<Item>> ItemList = new ReactiveProperty<List<Item>>();

void Awake()
{
    ItemList.Subscribe(items => {
    // ItemListが更新されたらItemMapを一度Clearしたい
        ItemMap.Clear();
        if (ItemMap.ContainsKey(eFilter.NONE))
            ItemMap.Add(eFilter.NONE, items);
        else
            ItemMap[eFilter.NONE] = items;
    }).AddTo(this);
}

// ItemListを更新する奴。更新は外から呼ばれる
public void UpdateItemList (List<Item> infos)
{
    ItemList.Value = infos;
}

// 特定のクラスコードでフィルタされたItemのListをItemMapから取得したい。
// なければその場でフィルタしたものを作ってItemMapに保存してそれを返す
private List<Item> GetItemList(eFilter filterType)
{
// ここが返す値がItemListのSubscribeでClearしてるにもかかわらず古い情報を返していた。
    if (!ItemMap.ContainsKey(filterType)){
        ItemMap.Add(filterType, ItemList.Value.Where(item => item.GetFilterType() == filterType).ToList());
    }

    return ItemMap[filterType]; 
}

解決した結果こうなった

void Awake()
{
}

// ItemListを更新する奴。更新は外から呼ばれる
public void UpdateItemList (List<Item> infos)
{
    ItemList.Value = infos;

    // ItemListが更新されたらItemMapを一度Clearしたい
    ItemMap.Clear();
    if (ItemMap.ContainsKey(eFilter.NONE))
        ItemMap.Add(eFilter.NONE, items);
    else
        ItemMap[eFilter.NONE] = items;
}

いみわからん…

(一部外出し用にReplaceしたコードがあるから意味不明になってそう)

/*コードブロックに言語名を表示*/ pre.code:before { content: attr(data-lang); display: inline-block; background: #ccc; /*カラーコード変更*/ color: #666; padding: 3px; position: absolute; margin-left: -20px; /*表示位置を調整*/ margin-top: -30px; } pre.code { padding-top: 30px !important; border:2px solid #ccc; /*追加:コード表示部分の枠設定*/ background:#f8f8f8; /*追加:コード表示部分の背景色*/ position:relative; /*追加*/ }