是否有一种方法可以在运行时获得属性的声明方法/属性?

本文关键字:方法 属性 运行时 声明 一种 是否 | 更新日期: 2023-09-27 18:18:21

好的,考虑以下场景:

public class Foo()
{
    [FooProperty]
    public int Blah { get { .... } }
    ...
}
[AttributeUsage(AttributeTargets.Property)]
public class FooPropertyAttribute: Attribute
{
    public FooPropertyAttribute()
    {
        //Is there any way to get at runtime a PropertyInfo of the declaring property 'Foo.Blah'?
    }
    ...
}

我知道这可能不是一个好主意,但最近,当原型一些类,问题出现了,我很好奇知道这是否可能

是否有一种方法可以在运行时获得属性的声明方法/属性?

既然你必须主动寻找这些属性,你可以做任何你想做的。

例如,如果你有这样的代码:

foreach (var propertyInfo in type.GetProperties())
{
    if (propertyInfo.IsDefined(typeof(FooPropertyAttribute), true))
    {
        var attr = (FooPropertyAttribute)propertyInfo.GetCustomAttributes(typeof(FooPropertyAttribute), true)[0];
        attr.FooMethod(propertyInfo); // <-- here
    }
}

然后你可以看到,你可以传递属性info对象给它。

除此之外,没有,没有。net的内置属性系统。

PostSharp之类的东西可能会支持它,但这是一个完全不同的问题。