从lambda表达式中检索事件名称

TcK*_*cKs 8 c# lambda

有没有办法如何从Lambda表达式获取名称ov事件,如与属性( 从lambda表达式检索属性名称)?

谢谢

Eni*_*ity 6

是的,它就像获取属性名称一样,但您必须在定义事件的类中执行此操作.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

请享用.


Mar*_*ell 4

不可以。C# lambda 不支持事件,因此无法表示这一点。你必须使用反射。

  • @TcKs - 不是真的。选项:(1)使用接口来公开您的事件,并强制转换到该接口;(2)(仅适用于“*Changed”)使用诸如“PropertyDescriptor”之类的抽象,它可以代表您将属性映射到匹配的事件;(3) 与字符串一起生活(通过一些单元测试)。我想我们都会喜欢这里缺少的“infoof”运算符,但它不存在。我们不断地问... (2认同)