Adición de un evento en un diccionario

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.

preguntado el 29 de septiembre de 13 a las 22:09

¿Por qué declaras el diccionario interno? var someType2Dictionary = Dictionary<SomeType2, delegate { }>();, no debería ser var 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 de SomeType1. También desde SomeType1 y SomeType2 se están utilizando como claves de diccionario ¿tienen .GetHashCode() y Equals() anulado correctamente? -

Con 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. -

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. -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.