有没有办法告诉String.Format()
函数(没有编写我自己的函数)有多少个占位符是动态的?我们很高兴地说15
,并知道我会为我生成{0}-{14}
。我生成的文本文件,我经常有超过25列。这将非常有帮助。自动生成占位符格式字符串String.Format()
好吧,
我会重写一下我的问题。我想知道是否完全可以在执行时告诉String.Format
函数,在我的格式字符串中需要多少个占位符,而无需手动输入。
到目前为止,我在回应中猜测,我会继续写下我自己的方法。
谢谢!
有没有办法告诉String.Format()
函数(没有编写我自己的函数)有多少个占位符是动态的?我们很高兴地说15
,并知道我会为我生成{0}-{14}
。我生成的文本文件,我经常有超过25列。这将非常有帮助。自动生成占位符格式字符串String.Format()
好吧,
我会重写一下我的问题。我想知道是否完全可以在执行时告诉String.Format
函数,在我的格式字符串中需要多少个占位符,而无需手动输入。
到目前为止,我在回应中猜测,我会继续写下我自己的方法。
谢谢!
在AlbertEin的回复中增加了一点,我不相信String.Format
可以为您开箱即用。你需要使用String.Format
方法之前,动态创建的格式字符串,如:
var builder = new StringBuilder();
for(var i = 0; i < n; ++i)
{
builder.AppendFormat("{0}", "{" + i + "}");
}
String.Format(builder.ToString(), ...);
这不完全可读的,虽然。
感谢您的开始,我开始了类似的例程。我想我应该得到更多的睡眠,然后再问这样明显的问题;) – Chris 2009-09-14 17:16:18
@Chris - 没有问题。如果您正在格式化的代码块的时间长于此处显示的内容,请相应发表评论。这不是我经常看到的方法,可能会让很多人感到困惑。 – 2009-09-14 17:20:13
为什么在没有格式时使用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
你可以使用Enumerable.Range和LINQ生成您的消息字符串。
Enumerable.Range(0, 7).Select(i => "{" + i + "}").ToArray()
产生以下字符串:
"{0}{1}{2}{3}{4}{5}{6}"
你或许应该写自己的功能 - 这是不容易理解你想要做什么。 String.Join可能很有用。 – dbkk 2009-09-14 17:09:30