2012-12-12 2 views
0

나는 간단한 GET 세트 특성을 가진 다른 POCO 클래스를 포함하는 클래스가 있습니다. 나는 반사를 통해 그것을 얻는 방법을 알아낼 수 없습니다 : 내가 가지고있는C#을 단순한 반사

foreach (PropertyInfo property in this.PersonalInformation.GetType().GetProperties()) 
{ 
    if (property.Name.Contains("First")) 
    { 
    if (property.GetValue(XXX, null) != null) 
          do something... 

    } 
} 

인스턴스는 "이", this.PersonalInformation을 작동하지, 어느 쪽도하지 않는 것입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

알도에게, 당신의 응답을

부록 감사 : 내가 ASP.NET MVC3를 사용하고 있습니다. 내 면도기보기에서 나는 아주 쉽게 다음을 수행 할 수

foreach (var property in Model.PersonalInformation.GetType().GetProperties()) 
{ 
    <div class="editor-line"> 
     @if (property.Name != null) 
     { 
     <label>@(property.Name)</label> 
     @Html.Editor(property.Name) 
     } 
    </div> 
} 

은 필드의 현재 값을 반환하는 property.Value 회원이있다. 이 필드는 위에서 보았 듯이 poco 클래스에서옵니다. 코드 숨김에서 동등한 코드는 무엇입니까?

+3

"작동하지 않음"이란 무엇을 의미합니까 –

+2

리플렉션을 사용하는 이유는 무엇입니까? –

+0

무엇을 시도 했습니까? 예외가 있습니까? 리플렉션을 사용해야합니까? – lesderid

답변

4

this.PersonalInformation 확실히 이어야합니다.이어야합니다. 결국 그것은 당신이 말하는 대상입니다.

샘플 코드 :

using System; 
using System.Reflection; 

public class PersonalInformation { 
    public string FirstName { get; set; } 
    public string FirstSomethingElse { get; set; } 
} 

public class Foo 
{ 
    public PersonalInformation PersonalInformation { get; set; } 

    public void ShowProperties() 
    { 
     foreach (var property in this.PersonalInformation 
            .GetType() 
            .GetProperties()) 
     { 
      var value = property.GetValue(this.PersonalInformation, null); 
      Console.WriteLine("{0}: {1}", property.Name, value); 
     } 
    } 
} 

class Test 
{ 
    static void Main() 
    { 
     Foo foo = new Foo { 
      PersonalInformation = new PersonalInformation { 
       FirstName = "Fred", 
       FirstSomethingElse = "XYZ" 
      } 
     }; 
     foo.ShowProperties(); 
    } 
} 

그냥 "현재 인스턴스의 PersonalInformation.FirstName에 값이 있는지 확인하려면"경우 반사를 사용하고 왜 나는 볼 수 없지만 ...

-3

GetProperties는 하나의 PropertyInfo가 아니라 PropertyInfo []를 반환합니다.

+0

... 왜 그가 그들을 반복하고 있는지. –

+0

네 말이 맞아, 너무 빨리 읽으면 나는 foreach도 보지 못했다. – Kevin