在c#中访问动态类的动态属性和设置值
本文关键字:动态 属性 设置 访问 | 更新日期: 2023-09-27 18:17:42
我尝试创建一个扩展方法,接受参数为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;
}
}
}
我想通过属性名称从集合中获取项目的每个属性的值。我怎样才能实现它?
可以这样做:
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);
}
}
}
既然你使用的是动态的,一切都是在运行时设置的,你可以考虑使用反射。我看到你已经使用了PropertyInfo
,所以也许你可以这样扩展它:
public static object GetPropValue(object src, string propName)
{
return src.GetType().GetProperty(propName).GetValue(src, null);
}