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

前端之家收集整理的这篇文章主要介绍了c# – 识别MethodInfo实例是否是属性访问器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 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.)

猜你在找的C#相关文章