2012-05-15 6 views
0

포함 나는이 내 변수의 모든 속성을 통해 루프 다음 ​​프로그램 :변수의 모든 속성을 반복합니다. 복잡한 유형

class Program 
{ 
    static void Main(string[] args) 
    { 
     var person = new Person {Age = 30, Name = "Tony Montana", Mf = new Gender {Male = true,Female = false}}; 
     var type = typeof(Person); 
     var properties = type.GetProperties(); 

     foreach (PropertyInfo property in properties) 
     { 
      Console.WriteLine("{0} = {1} : Value= {2}", property.Name, property.PropertyType, property.GetValue(person, null)); 
     } 

     Console.Read(); 
    } 
} 

public class Person 
{ 
    public int Age { get; set; } 
    public string Name { get; set; } 
    public Gender Mf; 
} 


public class Gender 
    { 
     public bool Male; 
     public bool Female; 
    } 

내가 이것을 실행하면, 나는 다음과 같은 출력을 얻을 : 내 복합 형식을 볼 해달라고

"Age = System.Int32 : Value= 30" 
"Name = System.String : Value= Tony Montana" 

을 사람. 어떻게하면 내 대상자를 반복하여 사람의 유형을 얻을 수 있습니다 .Mf와 사람의 속성 .Mf (즉, 사람 .Mf. 남성 등)? 미리 감사드립니다.

+0

죄송 필드를 복구하여 속성처럼 정의하려면 – BoundForGlory

+0

성별 Gender { 공개 bool 남성; 공개 프로필 bool 여성; } – BoundForGlory

+0

제공하신 코드에서 성별은 속성이 아니라 입력란입니다 (가져 오기/설정이 없음). –

답변

1

Mf는 (는) 등록하지 않으므로 필드 속성입니다. 로 변경 :

public Gender Mf { get; set; } 

또는 선택적으로 사용 반사 public 필드의 모든 반복하는 (하지만 난 당신이 그냥에게 재산을 더 나을 것 같아요).

+0

속성을 만들었을 때 "Mf = ConsoleApplication1.Gender : Value = ConsoleApplication1.Gender"라는 출력이 표시됩니다. 내 person 객체에 캡슐화 된 Mf 객체의 이름과 값을 어떻게 얻을 수 있습니까? – BoundForGlory

+1

더 의미있는 문자열 표현을 제공 할 수 있도록 성 (Gender)에서'ToString'을 재정의 (override)하려고합니다. – Servy

+0

이것은 복합 개체에 대한 (기본) ToString 구현을 반환합니다. ToString을 재정의하거나 단순한 객체 만 남을 때까지 복잡한 객체를 재귀 적으로 반영하십시오. –

0

재산이 아니 어서 보이지 않습니다.

  • 을 그 문제를 해결하거나, 내가이 중단

  • 또는 반사가 너무

    FieldInfo[] fields = type.GetFields()

+0

나는 그것을 재산으로 만들었고 이것을 시도했지만 모두 되돌아왔다. – BoundForGlory

+0

FieldInfo [] fields = type.GetFields(); foreach (필드의 var fieldInfo) { Console.WriteLine ("{0} = {1} 값 : {2}", fieldInfo.Name, fieldInfo.FieldType, fieldInfo.GetValue (person)); } – BoundForGlory

+0

필드가 '비공개'이므로 올바른 '바인딩'을 사용하여 정보를 얻으십시오. – Tigran

관련 문제