2012-12-12 106 views
0

我有一个包含简单的获取设置的属性另一POCO类的类:C#简单反映

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

我想看看当前实例的PersonalInformation.FirstName有一个值。我无法弄清楚如何通过反射获得它:

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。在我的Razor视图我可以做很容易以下:

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