如何在 C# 中将键值添加到字典时发生 notify\raise 事件

How to notify\raise event when a key value is added to Dictionary in C#

如果将新的 key\value 对添加到静态字典,我想在另一个线程中执行一些操作。一种天真的方法是频繁地进行轮询并检查是否包含 ContainsKey(givenKey),但我想做得更快而不是延迟轮询。

您必须创建自己的词典。最佳做法是:

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);
    }

    // ...
    // ...
}

现在您可以自由地为 Before-Add-ItemAfter-Add-Item 创建活动了。您还可以将一些 Handled 参数添加到 DictChangedEventArgs-Class 以防止添加特殊项目。您还可以决定使用 Type-Enum 或为每个操作创建一个自己的事件。

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