0

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

好的,

我会改写我的问题。我想知道是否有可能String.Format在执行时告诉函数我想要在我的格式字符串中有多少个占位符,而无需手动将它们全部输入。

我猜到目前为止的反应,我会继续写我自己的方法。

谢谢!

4

4 回答 4

3

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

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

生成以下字符串:

"{0}{1}{2}{3}{4}{5}{6}"
于 2012-05-10T08:06:52.203 回答
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(), ...);

不过,这并不完全可读。

于 2009-09-14T17:10:57.007 回答
1

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

于 2009-09-14T17:11:26.627 回答
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
于 2009-09-14T17:42:54.910 回答