我尝试创建一个扩展方法,接受参数为IEnumerable类型,并尝试根据列数和行数生成一些html字符串,如下所示
public static string Grid<T>(IEnumerable<T> collection )
{
string template = "<div class='loadTemplateContainer' style='display: block;'>"+
"<div class='headercontainer'>";
PropertyInfo[] classProperties = typeof (T).GetProperties();
foreach (PropertyInfo classProperty in classProperties)
{
template = template + "<div class='column style='width: 200px;'>" +
classProperty.Name + "</div>";
}
template = template + "</div><table class='allTemplateTable'><tbody>";
string rowTemplate = "";
foreach (dynamic item in collection)
{
rowTemplate = rowTemplate + "<tr>";
foreach (PropertyInfo classProperty in classProperties)
{
var currentProperty = classProperty.Name;
}
}
}
我希望通过属性名称从集合中获取项目的每个属性的值。我怎么能实现它?
答案 0 :(得分:3)
可以通过以下方式完成:
public static string Grid<T>(IEnumerable<T> collection)
{
...........
...........
foreach (T item in collection)
{
foreach (var p in classProperties )
{
string s = p.Name + ": " + p.GetValue(item, null);
}
}
}
答案 1 :(得分:2)
由于您使用的是动态而且所有内容都是在运行时设置的 - 您可以考虑使用反射。我看到你已经使用过PropertyInfo
所以也许你可以像这样扩展它:
public static object GetPropValue(object src, string propName)
{
return src.GetType().GetProperty(propName).GetValue(src, null);
}
并在迭代器中使用以获得所需的值。