C# 将列标题添加到HTML表(列表添加到HTML表)

C# 将列标题添加到HTML表(列表添加到HTML表),c#,html,C#,Html,当前代码运行良好。但是,缺少列标题。在当前示例中,NRO、NRO1、SNAME是列标题 我知道应该将添加到现有方法中,但很难弄清楚如何添加 <tr> <th>NRO</th> <th>NRO1</th> <th>SNAME</th> </tr> 我试着这样做: var HTML = GetMyTable(duplicates, x => x.NRO,

当前代码运行良好。但是,缺少列标题。在当前示例中,
NRO、NRO1、SNAME
是列标题

我知道应该将
添加到现有方法中,但很难弄清楚如何添加

  <tr>
    <th>NRO</th>
    <th>NRO1</th>
    <th>SNAME</th>
  </tr>

我试着这样做:

    var HTML = GetMyTable(duplicates, x => x.NRO, x => x.NRO1, x => x.SNAME);
    public static string GetMyTable<T>(IEnumerable<T> list, params Func<T, object>[] fxns)
    {

        StringBuilder sb = new StringBuilder();
        sb.Append("<table>\n");
        sb.Append("<tr>\n");
        sb.Append("<th>NRO</th>\n");
        sb.Append("<th>NRO1</th>\n");
        sb.Append("<th>SNAME</th>\n");
        sb.Append("</tr>\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();
    }
var html = GetMyTable(duplicates,
    x => (x?.NRO, nameof(x.NRO)),
    x => (x?.NRO1, nameof(x.NRO1)),
    x => (x?.SNAME, nameof(x.SNAME))
);
公共静态字符串GetMyTable(IEnumerable列表,params Func[]fxns)
{
StringBuilder sb=新的StringBuilder();
某人附加(“\n”);
某人附加(“\n”);
sb.追加(“NRO\n”);
sb.追加(“NRO1\n”);
sb.追加(“SNAME\n”);
某人附加(“\n”);
foreach(列表中的变量项)
{
某人附加(“\n”);
foreach(fxns中的变量fxn)
{
某人加上(“”);
某人追加(fxn(项目));
某人加上(“”);
}
某人附加(“\n”);
}
某人加上(“”);
使某人返回字符串();
}

是否可以为标题创建一个循环,这样就不需要为每个表分别分配标题?

如果要在循环中添加标题,只需在创建表标记时创建一次即可

    public static string GetMyTable<T>(IEnumerable<T> list, params Func<T, object>[] fxns)
    {

        StringBuilder sb = new StringBuilder();
        sb.Append("<table>\n");
        // this needs to be outside the loop
        sb.Append("<tr>\n");
        sb.Append("<th>NRO</th>\n");
        sb.Append("<th>NRO1</th>\n");
        sb.Append("<th>SNAME</th>\n");
        sb.Append("</tr>\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();
    }

公共静态字符串GetMyTable(IEnumerable列表,params Func[]fxns)
{
StringBuilder sb=新的StringBuilder();
某人附加(“\n”);
//这需要在循环之外
某人附加(“\n”);
sb.追加(“NRO\n”);
sb.追加(“NRO1\n”);
sb.追加(“SNAME\n”);
某人附加(“\n”);
foreach(列表中的变量项)
{
某人附加(“\n”);
foreach(fxns中的变量fxn)
{
某人加上(“”);
某人追加(fxn(项目));
某人加上(“”);
}
某人附加(“\n”);
}
某人加上(“”);
使某人返回字符串();
}

如果要在循环中添加标题,只需在创建表标记时创建一次即可

    public static string GetMyTable<T>(IEnumerable<T> list, params Func<T, object>[] fxns)
    {

        StringBuilder sb = new StringBuilder();
        sb.Append("<table>\n");
        // this needs to be outside the loop
        sb.Append("<tr>\n");
        sb.Append("<th>NRO</th>\n");
        sb.Append("<th>NRO1</th>\n");
        sb.Append("<th>SNAME</th>\n");
        sb.Append("</tr>\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();
    }

公共静态字符串GetMyTable(IEnumerable列表,params Func[]fxns)
{
StringBuilder sb=新的StringBuilder();
某人附加(“\n”);
//这需要在循环之外
某人附加(“\n”);
sb.追加(“NRO\n”);
sb.追加(“NRO1\n”);
sb.追加(“SNAME\n”);
某人附加(“\n”);
foreach(列表中的变量项)
{
某人附加(“\n”);
foreach(fxns中的变量fxn)
{
某人加上(“”);
某人追加(fxn(项目));
某人加上(“”);
}
某人附加(“\n”);
}
某人加上(“”);
使某人返回字符串();
}

如果我理解正确,下面的代码怎么样

public static string GetMyTable<T>(IEnumerable<T> list,
    params Func<T, (object, string)>[] fxns)
{
    var sb = new StringBuilder();
    sb.Append("<table>\n");
    sb.Append("<tr>\n");

    foreach (var fxn in fxns)
        sb.Append("<th>").Append(fxn(default).Item2).AppendLine("</th>");

    sb.Append("</tr>\n");

    foreach (var item in list)
    {
        sb.Append("<tr>\n");
        foreach (var fxn in fxns)
        {
            sb.Append("<td>");
            sb.Append(fxn(item).Item1);
            sb.Append("</td>");
        }
        sb.Append("\n</tr>\n");
    }
    sb.Append("</table>");

    return sb.ToString();
}

如果我理解正确,下面的代码如何

public static string GetMyTable<T>(IEnumerable<T> list,
    params Func<T, (object, string)>[] fxns)
{
    var sb = new StringBuilder();
    sb.Append("<table>\n");
    sb.Append("<tr>\n");

    foreach (var fxn in fxns)
        sb.Append("<th>").Append(fxn(default).Item2).AppendLine("</th>");

    sb.Append("</tr>\n");

    foreach (var item in list)
    {
        sb.Append("<tr>\n");
        foreach (var fxn in fxns)
        {
            sb.Append("<td>");
            sb.Append(fxn(item).Item1);
            sb.Append("</td>");
        }
        sb.Append("\n</tr>\n");
    }
    sb.Append("</table>");

    return sb.ToString();
}

谢谢你!我已经弄明白了。然而,这意味着该方法将不适用于任何表,因为头是在方法本身中指定的。也可以为标题创建一个循环吗?谢谢!我已经弄明白了。然而,这意味着该方法将不适用于任何表,因为头是在方法本身中指定的。是否也可以为标题创建一个循环?