0

我有一个类,其中包含另一个具有简单 get set 属性的 poco 类:

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”,它不起作用,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 类。代码隐藏中的等效代码是什么?

4

2 回答 2

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 是否有值”,那么我不明白你为什么要使用反射......

于 2012-12-12T20:43:47.653 回答
-3

GetProperties 返回一个 PropertyInfo[],而不是单个 PropertyInfo。

于 2012-12-12T20:46:22.663 回答