【问题标题】:Join a List of Strings with a costum format加入具有自定义格式的字符串列表
【发布时间】:2013-01-18 00:17:07
【问题描述】:

我有一个这样定义的字符串列表

List<String> lstHeaders = new List<string>(new String[]{"str","str1","str2"}); 

我想要一种方法以特定格式加入所有元素以获得类似的东西

<td>str</td><td>str1</td><td>str2</td>

但是只在网上的代码中得到这个,就像这样

"<th>"+lstHeaders.functionToGetFormated()+"</th>"

【问题讨论】:

  • 我在想一个 lamda 表达式,但我不知道如何得到这个结果

标签: c# string concatenation


【解决方案1】:

使用StringBuilder 类:

var sb = new StringBuilder();
lstHeaders.ForEach(x => sb.AppendFormat("<td>{0}</td>", x));
return sb.toString()

【讨论】:

    【解决方案2】:

    为此编写自己的扩展方法可能更有意义。没有任何内置功能可以完全像那样工作(我知道)。

    public static string WrapElementsWithTag(this IEnumerable<string> input, string wrapper)
    {
        StringBuilder sb = new StringBuilder();
        foreach (string s in input)
        {
            sb.AppendFormat("<{1}>{0}</{1}>", s, wrapper);
        }
        return sb.ToString();
    }
    

    叫像;

    lstHeaders.WrapElementsWithTag("td");
    

    【讨论】:

    • @eli.rodriguez 他试图通过提供您说您需要的确切方法来解决您的问题。 +1
    • @eli.rodriguez;这很可能会导致不可重用的解决方案和大量的内联代码。我想这不会是唯一类似的用例。
    • 一个小更新,使其成为“使用标签包装列表元素”功能的更可重用的实现。
    【解决方案3】:

    使用 Linq 和 String.Concat:

    string result = string.Concat(lstHeaders.Select(s => string.Format("<td>{0}</td>", s)));
    

    查询语法可能更清晰:

    string result = string.Concat(from s in lstHeaders select string.Format("<td>{0}</td>", s));
    

    【讨论】:

    • 绝对没有查询语法 yuck!
    • 虽然功能正常,但在这种情况下,我认为这只会产生大量内联、难以阅读和不可重用的代码。
    【解决方案4】:

    你可以这样做:

    string.Format("<td>{0}</td>", string.Join("</td><td>", lstHeaders));
    

    【讨论】:

      【解决方案5】:

      一般来说,简单的字符串连接对于构建像 html 和 xml 这样的元数据是有风险的。如果您绝对确定文本不会破坏元语法,您肯定可以使用 StringBuilder 或 LinQ 来做到这一点。比如说,那些字符串已经被转义了。

      否则,您可以考虑使用 HtmlTextWriter。在 LINQ 中使用 HtmlTextWriter 应该不难。

      【讨论】:

        猜你喜欢
        • 2013-05-11
        • 2012-08-28
        • 1970-01-01
        • 2013-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多