次のようにする必要があります。
(int)indexedItem.item.GetValue(model, null);
あなたのitem
財産はオブジェクトPropertyInfo
です。それを呼び出しGetValue()
て、クラスのインスタンスを渡し、そのプロパティの値を取得します。
indexedItem.item.GetType().GetProperty("Column")
上記のコードは、オブジェクトのプロパティ "Column" を探しPropertyInfo
ます (ヒント: PropertyInfo
"Column" プロパティはありません)。
更新:以下のコメントに基づいて、model
実際にはオブジェクトのコレクションです。その場合は、おそらく関数シグネチャでもう少し明示的にする必要があります。
public static TagBuilder BuildHtml( StringBuilder output, IEnumerable model )
それでは、ループを見てみましょう。
foreach (var indexedItem in model.GetType().GetProperties().Select((p, i) => new { item = p, Index = i }))
これが実際に行っていること:
IEnumerable<PropertyInfo> l_properties = model.GetType().GetProperties();
var l_customObjects = l_properties.Select(
(p, i) =>
new {
item = p, /* This is the PropertyInfo object */
Index = i /* This is the index of the PropertyInfo
object within l_properties */
}
)
foreach ( var indexedItem in l_customObjects )
{
// ...
}
これは、モデル オブジェクトからプロパティのリストを取得し、それらのプロパティ (または、これらのプロパティをラップする匿名オブジェクト) を反復処理しています。
あなたが実際に探しているのは、次のようなものだと思います。
// This will iterate over the objects within your model
foreach( object l_item in model )
{
// This will discover the properties for each item in your model:
var l_itemProperties = l_item.GetType().GetProperties();
foreach ( PropertyInfo l_itemProperty in l_itemProperties )
{
var l_propertyName = l_itemProperty.Name;
var l_propertyValue = l_itemProperty.GetValue( l_item, null );
}
// ...OR...
// This will get a specific property value for the current item:
var l_columnValue = ((dynamic) l_item).Column;
// ... of course, this will fail at run-time if your item does not
// have a Column property, unlike the foreach loop above which will
// simply process all properties, whatever their names
}