如何获取当前属性的PropertyDescriptor?

时间:2011-01-18 10:17:18

标签: c# .net propertydescriptor

如何获取当前属性的PropertyDescriptor?例如:

[MyAttribute("SomeText")]
public string MyProperty
{
    get{....}
    set
    {
        // here I want to get PropertyDescriptor for this property.
    }
}

4 个答案:

答案 0 :(得分:15)

你可以试试这个:


        public string Test
        {
            get
            {
                //Get properties for this
                System.ComponentModel.PropertyDescriptorCollection pdc = System.ComponentModel.TypeDescriptor.GetProperties( this );

                //Get property descriptor for current property
                System.ComponentModel.PropertyDescriptor pd = pdc[ System.Reflection.MethodBase.GetCurrentMethod().Name ];
            }
        }

答案 1 :(得分:9)

这是一个可重复使用的转换功能,适用于那些希望获得此功能的人:

public static PropertyDescriptor GetPropertyDescriptor(PropertyInfo PropertyInfo)
{
    return TypeDescriptor.GetProperties(PropertyInfo.DeclaringType).Item(PropertyInfo.Name);
}

这是一个扩展方法:

public static PropertyDescriptor PropertyDescriptor(this PropertyInfo propertyInfo)
{
  return TypeDescriptor.GetProperties(propertyInfo.DeclaringType)[propertyInfo.Name];
}

答案 2 :(得分:5)

我发现以下情况有效:

        //  get property descriptions
        PropertyDescriptorCollection properties = TypeDescriptor.GetProperties ( this );

        //  get specific descriptor
        PropertyDescriptor property = properties.Find ( PropertyName, false );

其中PropertyName是传递给方法的值。

答案 3 :(得分:0)

这个怎么样?

this.GetType().GetProperty("MyProperty")

我想你问的是你是否可以在没有字符串的情况下做到这一点 - 即代表'this property'的其他一些令牌。我认为不存在。但是既然你正在编写这段代码(?),只需在代码中输入属性名称有什么困难?