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

时间:2015-01-20 06:56:00

标签: c# dictionary

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

1 个答案:

答案 0 :(得分:7)

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

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参数,以防止添加特殊项目。您还可以决定使用Type - 枚举或为每个操作创建自己的事件。

但请务必确保您必须实施IDictionary中的所有方法,但这应该非常简单。