Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动为string.format()生成占位符格式字符串_C#_String Formatting - Fatal编程技术网

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.RangeLINQ生成消息字符串

Enumerable.Range(0, 7).Select(i => "{" + i + "}").ToArray()
生成以下字符串:

"{0}{1}{2}{3}{4}{5}{6}"
您可以使用Enumerable.RangeLINQ生成消息字符串

Enumerable.Range(0, 7).Select(i => "{" + i + "}").ToArray()
生成以下字符串:

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

您可能应该编写自己的函数——要准确理解您要做的事情并不容易。Join可能很有用。您可能应该编写自己的函数——要准确理解您要做的事情并不容易。字符串。加入可能有用。谢谢你的开始,我已经开始了类似的例行程序。我想在问一些显而易见的问题之前,我应该多睡一会儿;)@克里斯-没问题。如果正在格式化的代码块比此处显示的代码块长,请进行相应的注释。这不是我经常看到的方法,可能会让很多人感到困惑。感谢你的开始,我已经开始了类似的例行程序。我想在问一些显而易见的问题之前,我应该多睡一会儿;)@克里斯-没问题。如果正在格式化的代码块比此处显示的代码块长,请进行相应的注释。这不是我经常看到的方法,可能会让很多人感到困惑。