sé que muchas personas han hecho la pregunta de "¿Cómo me doy de baja el siguiente"Darse de baja Lambda Gestor de Eventos ** ** con el encierro
myButton.Click += (s, e) => MessageBox.Show("Hello World!");
Con la respuesta obvia de
EventHandler HelloWorld = delegate { MessageBox.Show("Hello World!"); };
myButton.Click -= HelloWorld;
myButton.Click += HelloWorld;
Pero, ¿qué estoy usando una lambda para crear un cierre? ¿Y si mi objeto tiene un evento denominado AssessmentRationChanged
que es de tipo Action
, y estoy de conectarlo de esta manera:
foreach (MassFMVUpdateDTO dto in CurrentProperties)
dto.AssessmentRationChanged +=() => setCellColorBasedOnAssessmentRatioValue(dto);
¿Qué pasa si hay una posibilidad de que ya he puesto este controlador para algunos/todos los objetos en este bucle? ¿Hay alguna manera de anular su suscripción?
Estoy seguro de que podría usar el reflejo y limpiar el controlador por completo, pero ¿hay una manera más limpia?
Grrrr. ¿Entonces probablemente vuelva a trabajar mi diseño y pase un remitente en el evento? - 'Acción' - Gracias como siempre Jon. –
¿Quién es John? :) – jgauffin
@ Adam: No ha aclarado el resto del contexto para que podamos decir si desea o no cambiar el diseño. No estoy seguro de cómo pasar un remitente ayudaría ... –