17

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

[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";

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

4

5 回答 5

26
string.Concat(Enumerable.Range(1,10).Select(i => string.Format("[{0}]", i)))
于 2012-04-27T08:44:16.833 回答
15

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

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}]").

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

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

于 2012-11-15T09:54:52.127 回答
1

我只是连接每个项目,并使用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()
  );
于 2012-04-27T08:46:19.727 回答
1

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

string nums = String.Concat(Enumerable.Range(1, 10)
                                      .Select(i => string.Format("[{0}]", i)))
于 2012-04-27T08:42:02.973 回答
1
StringBuilder str = new StringBuilder();
for (int i = 1; i <= 10; i++)
    str.AppendFormat("[{0}]", i);

Console.WriteLine(str.ToString());

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

于 2012-04-27T08:49:05.360 回答