2012-12-12 65 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