为String.Format()自动生成占位符格式字符串

时间:2009-09-14 17:06:05

标签: c# string-formatting

有没有办法告诉String.Format()函数(不编写我自己的函数)动态有多少占位符?我们很高兴地说15,并知道我已为我生成{0}-{14}。我生成文本文件,我经常有超过25列。这会有很大的帮助。

行,

我将改述我的问题。我想知道是否可以在执行时告诉String.Format函数在我的格式字符串中需要多少占位符而不用手工输入它们。

到目前为止,我正在猜测答案,我将继续编写自己的方法。

谢谢!

4 个答案:

答案 0 :(得分:3)

您可以使用 Enumerable.Range LINQ 来生成消息字符串。

Enumerable.Range(0, 7).Select(i => "{" + i + "}").ToArray()

生成以下字符串:

"{0}{1}{2}{3}{4}{5}{6}"

答案 1 :(得分:1)

为AlbertEin的回复添加一点,我不相信String.Format可以为您开箱即用。您需要在使用String.Format方法之前动态创建格式字符串,如:

var builder = new StringBuilder();

for(var i = 0; i < n; ++i)
{
  builder.AppendFormat("{0}", "{" + i + "}");
}

String.Format(builder.ToString(), ...);

但这并不完全可读。

答案 2 :(得分:1)

为什么在没有格式化时使用string.Format(至少在我的问题中可以看到)?您可以使用stringbuilder来使用简单连接。

答案 3 :(得分:0)

有一种方法可以直接执行此操作:

只需创建自定义IFormatProvider,然后使用string.Format的重载。

例如,如果您希望始终有12个小数点,则可以执行以下操作:

CultureInfo culture = Thread.CurrentThread.CurrentCulture.Clone(); // Copy your current culture
NumberFormatInfo nfi = culture.NumberFormat;
nfi.NumberDecimalDigits = 12; // Set to 12 decimal points

string newResult = string.Format(culture, "{0}", myDouble); // Will put it in with 12 decimal points