【问题标题】:string.Format with string.Joinstring.Format 与 string.Join
【发布时间】:2012-04-27 08:38:52
【问题描述】:

我尝试过制作这样的字符串:

[1][2][3][4][5][6][7][8][9][10]

使用此代码:

string nums = "[" + string.Join("][", Enumerable.Range(1, 10)) + "]";

然而,这看起来不太好,所以我想知道是否可以将 string.Formatstring.Join 结合起来,有点像这样:

string num = string.Join("[{0}]", Enumerable.Range(1, 10));

这样它就可以在每个项目周围包裹一些东西。然而,结果是这样的:

1[{0}]2[{0}]3[{0}]4[{0}]5[{0}]6[{0}]7[{0}]8[{0}]9[{0}]10

有没有更好/更简单的方法来做到这一点?


在所有解决方案中,我必须说我更喜欢这个

string s = string.Concat(Enumerable.Range(1, 4).Select(i => string.Format("SomeTitle: >>> {0} <<<\n", i)));

在此

string s2 = "SomeTitle: >>>" + string.Join("<<<\nSomeTitle: >>>", Enumerable.Range(1, 4)) + "<<<\n";

因为所有格式都是在一个字符串中完成的,而不是多个。

【问题讨论】:

  • 为什么你以前的解决方案不好 - 我看起来很完美! :)

标签: c# string formatting


【解决方案1】:
string.Concat(Enumerable.Range(1,10).Select(i => string.Format("[{0}]", i)))

【讨论】:

  • 附注:这只适用于 >= 4 的框架。对于旧版本,您需要将 Concat 参数转换为数组,例如添加 .ToArray()
【解决方案2】:

我想要这样的东西,但可以输入格式字符串和分隔符。所以这就是我想出的:

public static string JoinFormat<T>(this IEnumerable<T> list, string separator,
                                   string formatString)
{
    formatString = string.IsNullOrWhiteSpace(formatString) ? "{0}": formatString;
    return string.Join(separator,
                       list.Select(item => string.Format(formatString, item)));
}

现在你可以列一个类似的列表

[1]、[2]、[3]、[4]、[5]、[6]、[7]、[8]、[9]、[10]

输入numbers.JoinFormat(", ", "[{0}]")

而带有"[{0}],")Concat 解决方案将有一个尾随逗号。

空的或null 分隔符会生成您的列表。

【讨论】:

  • 我相信这应该是一个答案。它是通用的。
【解决方案3】:

您可能正在寻找 LINQ 解决方案,例如

string nums = String.Concat(Enumerable.Range(1, 10)
                                      .Select(i => string.Format("[{0}]", i)))

【讨论】:

    【解决方案4】:
    StringBuilder str = new StringBuilder();
    for (int i = 1; i <= 10; i++)
        str.AppendFormat("[{0}]", i);
    
    Console.WriteLine(str.ToString());
    

    我的建议是使用 StringBuilder 附加相同的模式。

    【讨论】:

      【解决方案5】:

      我只是连接每个项目,并使用String.Concat 将它们放在一起:

      string num =
        String.Concat(
          Enumerable.Range(1, 10).Select(n => "[" + n + "]")
        );
      

      如果你想变得花哨,你可以在数字和字符串数组之间进行交叉连接。 :)

      string num =
        String.Concat(
          from n in Enumerable.Range(1, 10)
          from s in new string[] { "[", null, "]" }
          select s ?? n.ToString()
        );
      

      【讨论】:

        猜你喜欢
        • 2010-09-16
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        相关资源
        最近更新 更多