2008-10-16 5 views
3

다음과 같이 사용자 지정 특성으로 표시된 클래스가 있습니다.속성으로 표시된 속성의 인스턴스 값을 얻으려면 어떻게해야합니까?

public class OrderLine : Entity 
{ 
    ... 
    [Parent] 
    public Order Order { get; set; } 
    public Address ShippingAddress{ get; set; } 
    ... 
} 

부모 특성으로 표시된 엔터티에 속성을 가져와야하는 일반 메서드를 작성하고 싶습니다.

내 특성은 다음과 같습니다.

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)] 
public class ParentAttribute : Attribute 
{ 
} 

어떻게 작성합니까?

답변

3

사용 Type.GetProperties()와 PropertyInfo.GetValue()

T GetPropertyValue<T>(object o) 
    { 
     T value = default(T); 

     foreach (System.Reflection.PropertyInfo prop in o.GetType().GetProperties()) 
     { 
      object[] attrs = prop.GetCustomAttributes(typeof(ParentAttribute), false); 
      if (attrs.Length > 0) 
      { 
       value = (T)prop.GetValue(o, null); 
       break; 
      } 
     } 

     return value; 
    } 
+0

내가 그 컴파일 것 같아요. 'T'로보세요. – leppie

+0

당신은 맞습니다. –

2

이 나를 위해 작동합니다

public static object GetParentValue<T>(T obj) { 
    Type t = obj.GetType(); 
    foreach (var prop in t.GetProperties()) { 
     var attrs = prop.GetCustomAttributes(typeof(ParentAttribute), false); 
     if (attrs.Length != 0) 
      return prop.GetValue(obj, null); 
    } 

    return null; 
}