在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;      
        }
    }       
}

我想通过属性名称从集合中获取项目的每个属性的值。我怎样才能实现它?

在c#中访问动态类的动态属性和设置值

可以这样做:

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);
}