如何在C#中将键值添加到Dictionary时通知\ raise事件

Rah*_*dar 1 c# dictionary

如果将新的键\值对添加到静态字典中,我想在其他线程中执行某些操作.一种天真的方法是以频繁的间隔进行轮询,并检查ContainsKey(givenKey),但我想更快,而不是延迟轮询.

Ben*_*dEg 9

你必须创建自己的字典.最佳做法是:

public enum Type
{
    AddItem,
    RemoveItem
}

public class DictChangedEventArgs<K, V> : EventArgs
{
    public Type Type
    {
        get;
        set;
    }

    public K Key
    {
        get;
        set;
    }

    public V Value
    {
        get;
        set;
    }
}

public class OwnDict<K, V> : IDictionary<K, V>
{
    public delegate void DictionaryChanged(object sender, DictChangedEventArgs<K, V> e);

    public event DictionaryChanged OnDictionaryChanged;

    private IDictionary<K, V> innerDict;

    public OwnDict()
    {
        innerDict = new Dictionary<K, V>();
    }

    public void Add(K key, V value)
    {
        if (OnDictionaryChanged != null)
        {
            OnDictionaryChanged(this, new DictChangedEventArgs<K, V>() { Type = Type.AddItem, Key = key, Value = value });
        }

        innerDict.Add(key, value);
    }

    // ...
    // ...
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以自由创建活动Before-Add-Item,After-Add-Item.您还可以HandledDictChangedEventArgs-Class 添加一些参数,以防止添加特殊项目.您还可以决定使用Type-Enum或为每个操作创建自己的事件.

但是可以肯定的是,你必须实现所有方法IDictionary,但这应该很容易.