.Net:如何使用TypeDescriptor.GetProperties获取自定义属性?

时间:2011-11-03 14:53:05

标签: .net custom-attributes typedescriptor

我创建了自己的属性来装饰我的对象。

 [AttributeUsage(AttributeTargets.All)]
    public class MyCustomAttribute : System.Attribute { }

当我尝试使用传入我的自定义属性的TypeDescriptor.GetProperties时,即使该属性使用该属性进行修饰,它也不会返回任何内容。

  var props = TypeDescriptor.GetProperties(
              type, 
              new[] { new Attributes.FlatLoopValueInjection()});

如何让TypeDescriptor.GetProperties识别我的自定义类型?

2 个答案:

答案 0 :(得分:8)

Type.GetProperties(type, Attributes[])方法仅使用指定的属性数组作为过滤器,为指定类型的组件返回属性的集合。
您确定目标类型的标有自定义属性的属性,就像这样?

//...
    var props = TypeDescriptor.GetProperties(typeof(Person), new Attribute[] { new NoteAttribute() });
    PropertyDescriptor nameProperty = props["Name"];
}
//...
class Person {
    [Note]
    public string Name { get; set; }
}
//...
class NoteAttribute : Attribute {
/* implementation */
}

答案 1 :(得分:0)

已更新以获取属性

此代码是从MSDN复制并粘贴的,这是谷歌搜索“get customattribute reflection c#”的第一个结果

using System;

public class ExampleAttribute : Attribute
{
    private string stringVal;

    public ExampleAttribute()
    {
        stringVal = "This is the default string.";
    }

    public string StringValue
    {
        get { return stringVal; }
        set { stringVal = value; }
    }
}

[Example(StringValue="This is a string.")]
class Class1
{
    public static void Main()
    {
        PropertyInfo propertyInfo = typeof (Class1).GetProperties().Where(p => p.Name == "Foo").FirstOrDefault();
        foreach (object attrib in propertyInfo.GetCustomAttributes(true))
        {
            Console.WriteLine(attrib);
        }
    }

    [Example(StringValue = "property attribute")]
    public string Foo {get;set;}
}