2009-09-14 43 views
0

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

好吧,

我会重写一下我的问题。我想知道是否完全可以在执行时告诉String.Format函数,在我的格式字符串中需要多少个占位符,而无需手动输入。

到目前为止,我在回应中猜测,我会继续写下我自己的方法。

谢谢!

+0

你或许应该写自己的功能 - 这是不容易理解你想要做什么。 String.Join可能很有用。 – dbkk 2009-09-14 17:09:30

回答

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(), ...); 

这不完全可读的,虽然。

+0

感谢您的开始,我开始了类似的例程。我想我应该得到更多的睡眠,然后再问这样明显的问题;) – Chris 2009-09-14 17:16:18

+0

@Chris - 没有问题。如果您正在格式化的代码块的时间长于此处显示的内容,请相应发表评论。这不是我经常看到的方法,可能会让很多人感到困惑。 – 2009-09-14 17:20:13

1

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

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 
2

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

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

产生以下字符串:

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