c# – 从具有指定属性的泛型类的列表生成HTML表

c# – 从具有指定属性的泛型类的列表生成HTML表,第1张

概述我想从几个指定的参数生成一个 HTML表.具体来说,我想传入我的方法的两个参数是:IEnumerable列表和T的属性的一些子集.例如,假设我有一个这个类的列表: class Person{ string FirstName string MiddleName string LastName} 让我们来看看这个名单里有5个人.我想通过这样做来获得该类(或任何其他任意类)的HTML表 我想从几个指定的参数生成一个 HTML表.具体来说,我想传入我的方法的两个参数是:IEnumerable列表和T的属性的一些子集.例如,假设我有一个这个类的列表:
class Person{  string Firstname  string MIDdlename  string Lastname}

让我们来看看这个名单里有5个人.我想通过这样做来获得该类(或任何其他任意类)的HTML表:

List<Person> people;...add people to Liststring HTML = GetMytable(people,"Firstname","Lastname");

我确定有一个更好的方法来指定哪些属性我想要从表生成表(或哪些属性我想从表中排除,这将更好,因为我通常会想要大部分或全部的类的属性),但我“我不知道(我从来没有用过反思,但我猜这是怎么回事).此外,该方法应该接受任何类型的类的列表.

关于如何实现这一点的任何聪明的想法?

解决方法 也许这样吗?
var HTML = GetMytable(people,x => x.Lastname,x => x.Firstname);public static string GetMytable<T>(IEnumerable<T> List,params Func<T,object>[] fxns){    StringBuilder sb = new StringBuilder();    sb.Append("<table>\n");    foreach (var item in List)    {        sb.Append("<TR>\n");        foreach(var fxn in fxns)        {            sb.Append("<TD>");            sb.Append(fxn(item));            sb.Append("</TD>");        }        sb.Append("</TR>\n");    }    sb.Append("</table>");    return sb.ToString();}

– 版本2.0–

public static string GetMytable<T>(IEnumerable<T> List,params  Expression<Func<T,object>>[] fxns){    StringBuilder sb = new StringBuilder();    sb.Append("<table>\n");    sb.Append("<TR>\n");    foreach (var fxn in fxns)    {        sb.Append("<TD>");        sb.Append(Getname(fxn));        sb.Append("</TD>");    }    sb.Append("</TR> <!-- header -->\n");    foreach (var item in List)    {        sb.Append("<TR>\n");        foreach (var fxn in fxns)        {            sb.Append("<TD>");            sb.Append(fxn.Compile()(item));            sb.Append("</TD>");        }        sb.Append("</TR>\n");    }    sb.Append("</table>");    return sb.ToString();}static string Getname<T>(Expression<Func<T,object>> expr){    var member = expr.Body as MemberExpression;    if (member != null)        return Getname2(member);    var unary = expr.Body as UnaryExpression;    if (unary != null)        return Getname2((MemberExpression)unary.Operand);    return "?+?";}static string Getname2(MemberExpression member){    var fIEldInfo = member.Member as FIEldInfo;    if (fIEldInfo != null)    {        var d = fIEldInfo.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute;        if (d != null) return d.Description;        return fIEldInfo.name;    }    var propertInfo = member.Member as PropertyInfo;    if (propertInfo != null)    {        var d = propertInfo.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute;        if (d != null) return d.Description;        return propertInfo.name;    }    return "?-?";}

PS:重复调用fxn.Compile()可以在紧密循环中成为性能杀手.最好在字典中缓存它.

总结

以上是内存溢出为你收集整理的c# – 从具有指定属性的泛型类的列表生成HTML表全部内容,希望文章能够帮你解决c# – 从具有指定属性的泛型类的列表生成HTML表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1260091.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存