加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 识别MethodInfo实例是否是属性访问器

发布时间:2020-12-15 04:25:08 所属栏目:百科 来源:网络整理
导读:我正在使用 Castle DynamicProxy编写一个装饰代理.我需要代理拦截器拦截属性写(而不是读),所以我正在检查方法的名称: public void Intercept(IInvocation invocation){ if (invocation.Method.Name.StartsWith("set_") { // ... } invocation.Proceed();}
我正在使用 Castle DynamicProxy编写一个装饰代理.我需要代理拦截器拦截属性写(而不是读),所以我正在检查方法的名称:
public void Intercept(IInvocation invocation)
{
    if (invocation.Method.Name.StartsWith("set_")
    {
        // ...
    }

    invocation.Proceed();
}

现在这样做不错,但是我不喜欢我的代理对于实现属性的深入了解:我想用类似于以下的东西替换方法名称检查:

if (invocation.Method.IsPropertySetAccessor)

不幸的是,我的Google-fu已经失败了我.有任何想法吗?

解决方法

您可以检查是否存在此方法是setter(未测试)的属性:
bool isSetAccessor = invocation.Method.DeclaringType.GetProperties() 
        .Any(prop => prop.GetSetMethod() == invocation.Method)

(灵感取自Marc’s answer to a related question.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读