4

これはよくある質問だと思いますが、SOやgoogleで何も見つからなかったようです。

単一の引数のみをフォーマットすることは可能ですか?たとえば、 read ?string foo = "{0} is {1} when {2}";を返すようにフォーマットします。"{0} is cray when {2}"

意図:
ベースメソッドでフォーマットされる前に、メソッドをオーバーライドしながら文字列をフォーマットしようとしています

成功この答え
の おかげでそれを手に入れました、すべての答えは役に立ちました:)。

この単体テストは機能しました:

string foo = String.Format("{0} is {1} when {2}", "{0}", "cray", "{2}");
Assert.AreEqual("{0} is cray when {2}", foo);
string bar = string.Format(foo, "this", null, "it works");
Assert.AreEqual("this is cray when it works", bar);
4

2 に答える 2

6

あなたの質問を額面通りに受け止めて、私はあなたが次のことをすることができると思います:

string foo = String.Format("{0} is {1} when {2}", "{0}", "cray", "{2}");

つまり、評価されていない各フォーマットアイテムをそれ自体に置き換えるだけです。

于 2012-12-03T00:15:35.473 に答える
2

いいえ、これは不可能です。 String.Format括弧で囲まれたすべてのプレースホルダーを置き換えようとします。正しい数の引数を指定しないと、例外が発生します。

なぜこれを行おうとしているのかわかりませんが、出力をそのように見せたい場合は、角かっこをエスケープする必要があります。

var foo = String.Format("{{0}} is {0} when {{1}}", "cray");
// foo is "{0} is cray when {1}"

おそらく、あなたが何をしようとしているのかを正確に教えていただければ、私たちはあなたをよりよく助けることができるでしょう。

于 2012-12-03T00:11:19.420 に答える