J'ai besoin d'un IDictionary<T,K>
qui déclenche un événement à chaque fois qu'un item
est ajouté via la méthode Add
. Mais l'événement déclenché devrait dépendre de la clé de item
, à savoir si j'ajoute ("hello","world")
à un tel dictionnaire, le « bonjour » -event devrait être élevé, et si j'ajoute ("world","hello")
, le -event « monde » devrait être soulevée .Impossible de définir EventHandler comme événement
J'ai donc essayé de mettre en œuvre cela et a fini avec
class EventDictionary<T,K> : IDictionary<T,K>
{
private IDictionary<T,K> _internalDic;
private IDictionary<T, EventHandler> _onAddHandlers;
public EventHandler OnAdd(T key)
{
if (!_onAddHandlers.ContainsKey(key))
_onAddHandlers[key] = null;
return _onAddHandlers[key];
}
public void Add(T key, K value)
{
_internalDic.Add(key, value);
OnAdd(key)?.Invoke(this, EventArgs.Empty);
}
public void Add(KeyValuePair<T, K> item)
{
_internalDic.Add(item);
OnAdd(item.Key)?.Invoke(this, EventArgs.Empty);
}
... // implementing the other methods of IDictionary<T,K>
}
Cette compile - aussi longtemps que je ne fais pas le mot-clé event
:
private IDictionary<T, event EventHandler> _onAddHandlers; // syntax error
OU
public event EventHandler OnAdd(T key) { ... } // syntax error
Ai-je manqué quelque chose? Comment puis-je créer les gestionnaires d'événements OnAdd
(tous) event
s?
@ itsme86 Cela ne compilerait pas non plus, contrairement au code original de l'OP, qui fonctionnera très bien. – Servy
L'événement n'est pas un type. C'est un mot-clé. EventHandler est le type –