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

标签 c# reflection

我正在使用 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# - 识别 MethodInfo 实例是否是属性访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7819489/

相关文章:

c# - 使用 LINQ 使用特定范围的数字填充列表

c# - 如何打印彩色文本

java - 如何以反射方式打印方法主体?

java - java中的不可变类

c# - 如何使用反射找到特定的通用重载?

python - 如何找到传递给函数的变量的名称?

c# - 如何将两个字母的 ISO-3166 国家/地区代码映射到 C# 中的文化

c# - Entity Framework - 项目列表未加载

c# - 如何使用嵌套操作/回调对方法进行单元测试

reflection - 检查结构是否实现给定接口(interface)