2013-03-27 4 views
4

이 코드 :에서 TypeDescriptor와 자식 요소

foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(lst[0])) 
{ 
    Console.WriteLine(descriptor.Name); 
} 

내 목록에있는 모든 요소의 이름을 기록합니다. 나는. 성/성 또는 그 무엇. 요소의 자식들을 어떻게 써야합니까? 내 목록에 자동차의 유형과 색상이있는 Cars 요소가 있다면 TypeDescriptor를 사용하여이를 어떻게 작성합니까?

내가 지금 가지고하는 것은 :

  • FIRSTNAME
  • 자동차

내가 원하는 것은이 같은 것입니다 :

  • FIRSTNAME
  • 자동차 : 도요타,
  • 자동차 빨간색 : 미쓰비시, 녹색

사람이 작업을 수행하는 방법을 알고 있나요?

답변

1

PropertyDescriptor -class는 GetChildProperties(System.Object)이라는 메서드를 제공합니다.
현재 개체에서 메서드에 대한 참조를 전달할 수 있어야하며 대신에 자식 속성이 포함 된 다른 컬렉션을 수신해야합니다.
전체 기능을 얻으려면이 클래스에서 상속하는 것이 좋습니다.

설명서는 here을 참조하십시오.

1

개체 유형을 확인한 다음 올바른 유형 일 때 속성을 가져와야합니다.

foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(lst[0])) 
{ 
    Console.WriteLine(descriptor.Name); 

    if(descriptor.PropertyType == typeof(Car)) 
    { 
     foreach(var child in descriptor.GetChildProperties()) 
     { 
      Console.WriteLine(child.Name); 
     } 
    } 

} 
+0

을 내가하고, 그런 child.Name을 사용할 수 없습니다 것 같다 지금은 아이를 가지고도, 나는 child1의 이름을 얻는 방법을 찾을 수 없습니다 .1. 나는 TypeDescriptor에 익숙하지 않기 때문에 여기에 누락 된 내용이있을 수 있습니다. –

+0

설명자를 GetChildProperties 메서드로 전달해보십시오. – taylonr

+0

아직 운이 없습니다. 하위 항목에는 ComponentType, IsReadOnly, PropertyType이 있습니다. lst [0] .Cars 중 하나를 전달하는 데 도움이되지 않습니다. 그리고 나도 운이없이 이것을 시도했다. foreach (TypeDescriptor.GetProperties (lst [0] .Cars)의 PropertyDescriptor des) –

0

생각 해봐. 만큼 내가 (자동차)에 대한 아이들을 필요로하는 유형 I는 다음과 같이 할 수 있습니다으로 :

foreach (Car c in lst[0].Cars) 
       { 
        PropertyInfo[] properties = car.GetType().GetProperties(); 
        foreach (PropertyInfo item in properties) 
        { 
         string propertyName = item.Name; 
        } 
       }