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.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 に答える