Adición de un evento en un diccionario
Frecuentes
Visto 825 veces
2
Tengo el siguiente código de evento:
public delegate void SomeEventHandler(SomeEventArgs eventArgs);
event SomeEventHandler someEvent;
Mi escenario involucra el uso de eventos de tal manera que para cada SomeType1, hay un número arbitrario de SomeType2, con un evento asociado.
Ejemplo,
public event SomeEventHandler EventA1EventB1
public event SomeEventHandler EventA1EventB2
public event SomeEventHandler EventA1EventB3
...
public event SomeEventHandler EventA1EventBn
Seguido por,
public event SomeEventHandler EventA2EventB1
...
Dado el número arbitrario de las combinaciones anteriores (y el código bastante desordenado), opté por:
Dictionary<SomeType1, Dictionary<SomeType2, SomeEventHandler>>
El problema, por supuesto, es que no puede agregar la declaración de evento anterior a un diccionario. Para esto, acabo de usar,
delegate { }
Construyo el diccionario anterior de la siguiente manera:
var someType2Dictionary = Dictionary<SomeType2, delegate { }>();
someType1Dictionary.Add(someType1, someType2Dictionary);
Más tarde, miro hacia arriba así,
someType1Dictionary[someLookUpKey1][someLookUpKey2] += someEventOfTypeSomeEventHandler
En primer lugar, ¿hay una mejor manera de lidiar con el escenario anterior?
Y segundo, cuando se ejecuta, el mismo evento/delegado (para cualquier búsqueda) siempre se dispara o obtengo un valor nulo para el valor devuelto en el segundo diccionario.
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# .net events dictionary or haz tu propia pregunta.
¿Por qué declaras el diccionario interno?
var someType2Dictionary = Dictionary<SomeType2, delegate { }>();
, no debería servar someType2Dictionary = Dictionary<SomeType2, SomeEventHandler>();
? Además, su pregunta es un poco difícil de seguir, ¿puede poner sus tipos reales para ayudar a que sea más fácil entender lo que está tratando de hacer en lugar deSomeType1
. También desdeSomeType1
ySomeType2
se están utilizando como claves de diccionario ¿tienen.GetHashCode()
yEquals()
anulado correctamente? - Scott ChamberlainCon tal cantidad de eventos, explique por qué no tiene A1 y B1 como argumento de un solo evento, o cualquier otra forma de usar parámetros en lugar de una multitud de definiciones estáticas. - GameAlchemist
Resolví el problema. El problema no era relevante para ninguno de los códigos anteriores. ScottChamberlain, tiene razón; fue un error tipográfico (escribí la muestra a mano). La próxima vez, me limitaré a copiar y pegar el código aquí. @GameAlchemist Desafortunadamente, estoy trabajando con un DLL de API existente sobre el que no tengo control, así que tengo que trabajar con lo que tengo. - RecursiveCall