2012-07-30 3 views
1

클래스가 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) 

어떻게하면됩니까?

+1

각 속성에 대해 GetCustomAttributes를 사용하고 반환 된 특성이 MyAttr 유형인지 확인해야합니다. – Charleh

답변

8

그냥 LINQ를 사용하고 Where 절은 MemberInfo.IsDefined를 사용하여 :

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

꽤 멋진 Jon입니다. 전에 IsDefined를 사용 해본 적이 없다고 생각합니다. GetCustomAttributes에 대한 래퍼입니까? – Charleh

+0

@Charleh : 잘 모르겠다.하지만 사용하는 것이 더 쉽다. :) –

+0

글쎄, 코드 줄을 자르는 것이면 내 표를 얻는다. – Charleh

0

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

이 시도 - 기본적으로 속성에 foreach 문을하고 다시 각 속성에 대한 속성 유형을 얻을 수 있는지 확인합니다. 그렇게 할 경우 해당 속성의 속성은 다음과 같습니다.

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 
} 
관련 문제