Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取当前属性的PropertyDescriptor?_C#_.net_Propertydescriptor - Fatal编程技术网

C# 如何获取当前属性的PropertyDescriptor?

C# 如何获取当前属性的PropertyDescriptor?,c#,.net,propertydescriptor,C#,.net,Propertydescriptor,如何获取当前属性的PropertyDescriptor?例如: [MyAttribute("SomeText")] public string MyProperty { get{....} set { // here I want to get PropertyDescriptor for this property. } } 这个怎么样 this.GetType().GetProperty("MyProperty") 我想你是在问,你是否可以

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

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

this.GetType().GetProperty("MyProperty")
我想你是在问,你是否可以不用这个字符串来做这件事,也就是说,其他一些表示“thisproperty”的标记。我认为这是不存在的。但是,既然您正在编写此代码(?)那么,仅在代码中输入属性名称有什么困难?

您可以尝试以下方法:


        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 ];
            }
        }

我发现以下方法有效:

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

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

其中,
PropertyName
是传递到方法中的值。

这里有一个可重复使用的转换函数,供那些来到本文寻找通用函数的人使用:

publicstaticpropertydescriptor GetPropertyDescriptor(PropertyInfo PropertyInfo)
{
返回TypeDescriptor.GetProperties(PropertyInfo.DeclaringType).Item(PropertyInfo.Name);
}
这里有一个扩展方法:

public static PropertyDescriptor PropertyDescriptor(此PropertyInfo PropertyInfo)
{
返回TypeDescriptor.GetProperties(propertyInfo.DeclaringType)[propertyInfo.Name];
}

如果是这种情况,我将获取属性信息。。。但是我需要TypeConverter,从我的属性中显示名称..我也可以手动获取所有属性并找到TypeConverter,但这不是一个好主意,我还可以使用TypeDescriptor.GetProperties(这个),然后运行所有属性并找到我需要的。。。但也许内置的东西已经实现了。。。而且比我写的更快..你的代码对重构不友好。用lamda代替字符串。@CodeInChaos-你怎么能用lambda呢?你能举个例子吗?你。。。很好,我可以编写System.ComponentModel.PropertyDescriptorCollection pdc=System.ComponentModel.TypeDescriptor.GetProperties(这个);在我的构造函数中只使用一次。。。谢谢