¿hay alguna manera de cómo obtener el nombre del evento ov de la expresión lambda como con la propiedad ( Retrieving Property name from lambda expression)?Recuperando el nombre del evento de la expresión lambda
, gracias
¿hay alguna manera de cómo obtener el nombre del evento ov de la expresión lambda como con la propiedad ( Retrieving Property name from lambda expression)?Recuperando el nombre del evento de la expresión lambda
, gracias
Nº C# lambdas no son compatibles con los eventos, así que no hay manera de representar esto. Tendrás que usar la reflexión.
Sí, es como obtener el nombre de la propiedad, pero debe hacerlo en la clase que define el evento.
public class Foo
{
public event EventHandler Bar;
public string BarName
{
get
{
return this.GetEventName(() => this.Bar);
}
}
private string GetEventName(Expression<Func<EventHandler>> expression)
{
return (expression.Body as MemberExpression).Member.Name;
}
}
Enjoy.
Si entiendo bien, en este caso es "this.Bar" aceptado como f campo, no? Funcionará igual con "evento público EventHandler Bar" y "público EventHandler Bar", ¿verdad? Esto no es útil para mi propósito (estoy usando clases de terceros), pero puede ser una solución en algunos casos. ¡Gracias por responder! (+1) – TcKs
Sí, me temo que tienes razón. Solo puede usar este enfoque en la clase que define el evento. – Enigmativity
No quiero usar cosas como "GetEventInfo (button1," Click ") debido a la entrada con el nombre de la cadena de eventos. ¿Hay alguna otra manera de obtener el 100% correcto del nombre del evento o referencia a EventInfo o delegar add_/remove_ metod of event? Alguna forma de AOP u otra cosa? Gracias – TcKs
@TcKs - en realidad no. Opciones: (1) usar una interfaz para exponer su evento, y enviarlo a esa interfaz; (2) (solo se aplica a '* Modificado') use abstracción como' PropertyDescriptor' que puede mapear propiedades para hacer coincidir eventos en su nombre; (3) vivir con las cuerdas (con algunas pruebas unitarias). Creo que a todos nos encantaría la 'infoof' faltante operador aquí, pero no existe. Seguimos preguntando ... –
Gracias por sugerencias – TcKs