2009-05-01 3 views
1

내가 내가 이동합니다 Container 클래스의 인스턴스 주어진 모든 중첩 된 클래스의 인스턴스를 찾아 낼 방법이 두 클래스중첩 된 클래스와 재귀

public class Container 
{ 
    public string name { get; set; } 
    public Inner Inner { get; set; } 
} 

public class Inner 
{ 
    public string text { get; set; } 
    public Inner2 Innert2 { get; set; } 
} 

public class Inner2 {} 

을 말해봐. 문자열 등이 아닌 클래스에 대해서만 정말 염려합니다.

Inner에 클래스가 있으면 작동 할 수 있도록 일반화해야합니다. 또한 List<> 또는 IEnumerable 클래스가있는 경우에도 클래스를 찾을 필요가 있습니다.

건배.

+0

그것은 중첩 된 클래스가 아니지만, 나는 당신이 의미하는 것을 안다. http://msdn.microsoft.com/en-us/library/ms173120(VS.80).aspx –

+0

코드의 클래스간에 재귀 관계가 없습니다. 컨테이너에는 텍스트 속성 만 포함 된 Inner의 단일 인스턴스가 포함됩니다. 샘플을 검토하십시오. –

+0

거기에 중첩 된 클래스가 없습니다. 사용자 정의 유형의 특성을 의미합니까? – nawfal

답변

-1

당신은 갈 수있는 방법이 될 것입니다 반사를 사용하여 반사

http://msdn.microsoft.com/en-us/library/ms173183(VS.80).aspx

+0

그의 질문이 객체 그래프와 관련이 있는지 잘 모르겠습니다. 그는 오브젝트 구성에 관한 것이 아니라 중첩 된 클래스에 대해 이야기하고 있습니다. – user88637

2

와 객체 그래프를 통해 루프를 recurively 싶다. 다음은 클래스의 속성을 가져올 수있는 간단한 코드 단편입니다. 속성이 값 유형이 아닌 경우 재귀 적으로 자체를 호출합니다. 분명히 Enum 또는 IEnumerable 멤버로 특정 동작을 원한다면 추가해야합니다.

이 경우
public class Container 
{ 
    public string name { get; set; } 
    public Inner Inner { get; set; } 
} 

public class Inner 
{ 
    public string text { get; set; } 
    public List<Inner> MoreInners { get; set; } 
} 

, 당신은 일을하기 위해 외부 반복자 클래스를 사용하거나 직접 재귀를 만들 수 중 하나를 귀하의 예제의 코드가 같은 있었다면

public void FindClasses(object o) 
{ 
    if (o != null) 
    { 
     Type t = o.GetType(); 
     foreach(PropertyInfo pi in t.GetProperties()) 
     { 
      if(!pi.PropertyType.IsValueType) 
      { 
       // property is of a type that is not a value type (like int, double, etc). 
       FindClasses(pi.GetValue(o, null)); 
      } 
     } 
    } 
} 
1

귀하의 질문 일 것이다 Container 클래스에 추가합니다. 나는 후자를 할 것이다 :

public class Container 
{ 
    public string name { get; set; } 
    public Inner Inner { get; set; } 

    public List<Inner> SelectAllInner() 
    { 
     List<Inner> list = new List<Inner>(); 
     SelectAllInner(Inner, list); 
     return list; 
    } 

    private void SelectAllInner(Inner inner, List<Inner> list) 
    { 
     list.Add(inner); 
     foreach(Inner inner in MoreInners) 
      SelectAllInner(inner, list); 
    } 
} 

public class Inner 
{ 
    public string text { get; set; } 
    public List<Inner> MoreInners { get; set; } 
} 
관련 문제