0

オブジェクトのプロパティを foreach して PropertyInfo になった場合、オブジェクトの実際のプロパティにアクセスするにはどうすればよいですか?

@foreach(var propertyInfo in Model.Entity.GetType().GetProperties()) {
    if (propertyInfo.PropertyType != typeof(string) &&
        propertyInfo.PropertyType.GetInterface(typeof(IEnumerable<>).Name) != null) {
        <div>
            @foreach(var item in propertyInfo/*Need Actual Property Here*/) {
                @Html.Action("Edit", new { Id = item.Id, typeName = "Item" });
            }
        </div>;
    }
}
4

2 に答える 2

3

さて、あなたはそれを呼び出すためのインスタンスが必要です-おそらくそれModel.Entityはこの場合です。メソッドGetValue必要です。ただし、2つのことが必要なため、かなり注意が必要です。

  • によって反復可能であるために値が必要ですforeach
  • itemそれぞれにIdプロパティが必要です。

C#4と.NET 4を使用している場合は、動的型付けを使用して少し簡単にすることができます。

IEnumerable values = (IEnumerable) propertyInfo.GetValue(Model.Entity, null);
@foreach(dynamic item in values) {
    @Html.Action("Edit", new { Id = item.Id, typeName = "Item" });
}

あるいは:

dynamic values = propertyInfo.GetValue(Model.Entity, null);
@foreach(dynamic item in values) {
    @Html.Action("Edit", new { Id = item.Id, typeName = "Item" });
}
于 2011-08-04T20:15:08.217 に答える
1

あなたが「オブジェクトの実際のプロパティ」を取得すると言うとき、あなたがプロパティの値を参照しているなら、あなたは以下のようなことをすることができます。

var item = in propertyInfo.GetValue(Model.Entity, null);

ただし、適切な型が解決されていない場合(上記の例では推論に使用するオブジェクトである必要があります) 、さらに反映するか、データにアクセスするための別の動的な方法がないと、値varのプロパティにアクセスできません。Id

編集:foreach@Jon Skeetがキャストなしではコンパイルできないと指摘したように、例が含まれないように変更しました。これはさらに、からの値の取得を示すためのものです。PropertyInfo

于 2011-08-04T20:15:30.867 に答える