作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将一个对象作为参数传递给我的函数,该对象包含一个类型为 FeatureItemInfo
的对象列表。 .
FeatureItemInfo
是一个具有以下属性的类:
Name, Value , Type , DisplayOrder, Column
我想遍历列表并显示每个 <FeatureItemInfo>
的属性对象。
这是我到目前为止能想到的。但是我无法获取 featureIteminfo 的值。
这是我的功能:
public static TagBuilder BuildHtml(StringBuilder output, object model)
{
if (model != null)
{
foreach (var indexedItem in model.GetType().GetProperties().Select((p, i) => new { item = p, Index = i }))
{
var Colval = (int)indexedItem.item.GetType().GetProperty("Column").GetValue(indexedItem.item, null);
......
}
}
}
最佳答案
应该是:
(int)indexedItem.item.GetValue(model, null);
您的 item
属性是 PropertyInfo
目的。你打电话GetValue()
在其上,传递类的实例,以获取该属性的值。
indexedItem.item.GetType().GetProperty("Column")
以上代码将在 PropertyInfo
对象上查找属性“Column”(提示: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
}
关于c# - 遍历对象集合 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17348963/
我是一名优秀的程序员,十分优秀!