有没有办法告诉String.Format()
函数(无需编写我自己的函数)动态有多少占位符?我们很高兴地说15
,并且知道我会{0}-{14}
为我生成。我正在生成文本文件,而且我经常有超过 25 列。这将有很大帮助。
好的,
我会改写我的问题。我想知道是否有可能String.Format
在执行时告诉函数我想要在我的格式字符串中有多少个占位符,而无需手动将它们全部输入。
我猜到目前为止的反应,我会继续写我自己的方法。
谢谢!
有没有办法告诉String.Format()
函数(无需编写我自己的函数)动态有多少占位符?我们很高兴地说15
,并且知道我会{0}-{14}
为我生成。我正在生成文本文件,而且我经常有超过 25 列。这将有很大帮助。
好的,
我会改写我的问题。我想知道是否有可能String.Format
在执行时告诉函数我想要在我的格式字符串中有多少个占位符,而无需手动将它们全部输入。
我猜到目前为止的反应,我会继续写我自己的方法。
谢谢!
您可以使用Enumerable.Range和LINQ来生成您的消息字符串。
Enumerable.Range(0, 7).Select(i => "{" + i + "}").ToArray()
生成以下字符串:
"{0}{1}{2}{3}{4}{5}{6}"
在 AlbertEin 的回复中添加一点,我不相信String.Format
可以为您开箱即用地做到这一点。您需要在使用该String.Format
方法之前动态创建格式字符串,如下所示:
var builder = new StringBuilder();
for(var i = 0; i < n; ++i)
{
builder.AppendFormat("{0}", "{" + i + "}");
}
String.Format(builder.ToString(), ...);
不过,这并不完全可读。
为什么string.Format
在没有格式的情况下使用(至少从我在您的问题中可以看到)?您可以改用 stringbuilder 来使用简单的连接。
有一种方法可以直接做到这一点:
只需创建一个自定义 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