0

String.Format()動的にいくつのプレースホルダーがあるかを (独自の関数を記述せずに) 関数に伝える方法はありますか? と言うのは素晴らしいことであり、私が私のために生成した15ことを知っています. {0}-{14}私はテキスト ファイルを生成していますが、多くの場合、25 を超える列があります。それは大いに役立ちます。

わかった、

私の質問を言い換えます。String.Format手動ですべてを入力せずに、フォーマット文字列に必要なプレースホルダーの数を実行時に関数に伝えることができるかどうかを知りたかったのです。

これまでの回答から推測すると、先に進んで独自のメソッドを作成します。

ありがとう!

4

4 に答える 4

3

Enumerable.RangeLINQを使用してメッセージ文字列を生成 できます。

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

次の文字列を生成します。

"{0}{1}{2}{3}{4}{5}{6}"
于 2012-05-10T08:06:52.203 に答える
1

AlbertEinの応答に少し追加すると、すぐに使用できるとは思えませんString.FormatString.Formatメソッドを使用する前に、次のようにフォーマット文字列を動的に作成する必要があります。

var builder = new StringBuilder();

for(var i = 0; i < n; ++i)
{
  builder.AppendFormat("{0}", "{" + i + "}");
}

String.Format(builder.ToString(), ...);

ただし、これは正確には読み取れません。

于 2009-09-14T17:10:57.007 に答える
1

string.Format書式設定がない場合に使用するのはなぜですか(少なくとも私があなたの質問で見ることができるものから)? 代わりに stringbuilder を使用して単純な連結を使用できます。

于 2009-09-14T17:11:26.627 に答える
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
于 2009-09-14T17:42:54.910 に答える