如何通过自定义属性选择一些类的属性

时间:2012-07-30 14:26:06

标签: c# reflection attributes custom-attributes

我有3个属性的课程。

class Issuance
{
    [MyAttr]
    virtual public long Code1 { get; set; }

    [MyAttr]
    virtual public long Code2 { get; set; }

    virtual public long Code3 { get; set; }
}

我需要通过自定义属性([MyAttr])在此类中选择一些属性。

我使用GetProperties()但这会返回所有属性。

var myList = new Issuance().GetType().GetProperties();
//Count of result is 3 (Code1,Code2,Code3) But count of expected is 2(Code1,Code2) 

我该怎么做?

2 个答案:

答案 0 :(得分:8)

只需使用MemberInfo.IsDefined使用LINQ和Where子句:

var myList = typeof(Issuance).GetProperties()
                             .Where(p => p.IsDefined(typeof(MyAttr), false);

答案 1 :(得分:0)

http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.getcustomattributes.aspx

试试这个 - 基本上对属性做一个foreach,看看你是否找回了每个属性的属性类型。如果这样做,该属性具有以下属性:

e.g。

foreach(var propInfo in new Issuance().GetType().GetProperties()) 
{
    var attrs = propInfo.GetCustomAttributes(typeof(MyAttr), true/false); // Check docs for last param

    if(attrs.Count > 0)
      // this is one, do something
}