有没有办法告诉String.Format()
函数(不编写我自己的函数)动态有多少占位符?我们很高兴地说15
,并知道我已为我生成{0}-{14}
。我生成文本文件,我经常有超过25列。这会有很大的帮助。
行,
我将改述我的问题。我想知道是否可以在执行时告诉String.Format
函数在我的格式字符串中需要多少占位符而不用手工输入它们。
到目前为止,我正在猜测答案,我将继续编写自己的方法。
谢谢!
答案 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