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表所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)