C# 自动为string.format()生成占位符格式字符串
有没有办法告诉C# 自动为string.format()生成占位符格式字符串,c#,string-formatting,C#,String Formatting,有没有办法告诉String.Format()函数(不写我自己的函数)动态有多少占位符?我们很高兴能说15,并且知道我已经为自己生成了{0}-{14}。我正在生成文本文件,我经常有超过25列。这将大有帮助 嗯 我将重新措辞我的问题。我想知道是否有可能在执行时告诉String.Format函数我希望在我的格式字符串中有多少个占位符,而不必手动全部输入 我猜测到目前为止,我将继续写我自己的方法 谢谢 在AlbertEin的回答中加上一点,我不相信String.Format可以为您做到这一点。在使用st
String.Format()
函数(不写我自己的函数)动态有多少占位符?我们很高兴能说15
,并且知道我已经为自己生成了{0}-{14}
。我正在生成文本文件,我经常有超过25列。这将大有帮助
嗯
我将重新措辞我的问题。我想知道是否有可能在执行时告诉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(), ...);
var builder=new StringBuilder();
对于(变量i=0;i
不过,这并不完全易读。在AlbertEin的回答中添加一点内容,我不相信
String.Format
可以为您提供现成的帮助。在使用string.format
方法之前,需要动态创建格式字符串,如下所示:
var builder = new StringBuilder();
for(var i = 0; i < n; ++i)
{
builder.AppendFormat("{0}", "{" + i + "}");
}
String.Format(builder.ToString(), ...);
var builder=new StringBuilder();
对于(变量i=0;i
但是,这并不完全可读。为什么在没有格式的情况下使用
string.Format
(至少从我在您的问题中看到的情况来看)?您可以使用stringbuilder来使用简单的连接。在没有格式设置的情况下(至少从我在您的问题中看到的情况来看),为什么要使用string.Format
?您可以改用stringbuilder使用简单的连接。有一种方法可以直接做到这一点:
只需创建一个自定义的IFormatProvider,然后使用此重载
例如,如果希望始终有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
有一种方法可以直接做到这一点: 只需创建一个自定义的IFormatProvider,然后使用此重载 例如,如果希望始终有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}"
您可以使用Enumerable.Range和LINQ生成消息字符串
Enumerable.Range(0, 7).Select(i => "{" + i + "}").ToArray()
生成以下字符串:
"{0}{1}{2}{3}{4}{5}{6}"
您可能应该编写自己的函数——要准确理解您要做的事情并不容易。Join可能很有用。您可能应该编写自己的函数——要准确理解您要做的事情并不容易。字符串。加入可能有用。谢谢你的开始,我已经开始了类似的例行程序。我想在问一些显而易见的问题之前,我应该多睡一会儿;)@克里斯-没问题。如果正在格式化的代码块比此处显示的代码块长,请进行相应的注释。这不是我经常看到的方法,可能会让很多人感到困惑。感谢你的开始,我已经开始了类似的例行程序。我想在问一些显而易见的问题之前,我应该多睡一会儿;)@克里斯-没问题。如果正在格式化的代码块比此处显示的代码块长,请进行相应的注释。这不是我经常看到的方法,可能会让很多人感到困惑。