1100

使用時に角かっこをエスケープするにはどうすればよいstring.Formatですか?

例えば:

String val = "1,2,3"
String.Format(" foo {{0}}", val);

この例では例外はスローされませんが、文字列が出力されますfoo {0}

角かっこをエスケープする方法はありますか?

4

11 に答える 11

1400

出力 foo {1, 2, 3}するには、次のようなことを行う必要があります。

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);

を出力するには、{を使用{{し、を出力するには、}を使用します}}

または、このようにC#文字列補間を使用することもできます(C#6.0で利用可能な機能)

エスケープブラケット:文字列補間$( "")。これはC#6.0の新機能です。

var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be:  foo {1, 2, 3}
于 2008-09-18T10:07:35.737 に答える
220

はい、出力{するには、string.Format次のようにエスケープする必要があります。{{

したがって、次のように出力されます"foo {1,2,3}"

String val = "1,2,3";
String.Format(" foo {{{0}}}", val);

ただし、C# の設計バグについて知っておく必要があります。これは、上記のロジックを使用すると、以下のコードが {24.00} を出力すると想定することです。

int i = 24;
string str = String.Format("{{{0:N}}}", i); // Gives '{N}' instead of {24.00}

しかし、これは {N} を出力します。これは、C# がエスケープ シーケンスとフォーマット文字を解析する方法によるものです。上記の場合に目的の値を取得するには、代わりにこれを使用する必要があります。

String.Format("{0}{1:N}{2}", "{", i, "}") // Evaluates to {24.00}

参考記事

于 2013-02-26T09:12:39.003 に答える
80

もうすぐです!中括弧のエスケープシーケンスは、{{次の}}ようになります。

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
于 2008-09-18T10:08:47.997 に答える
24

二重開き括弧と二重閉じ括弧を使用すると、ページに 1 つの括弧のみが表示されます。

于 2010-03-22T10:09:28.993 に答える
5
[TestMethod]
public void BraceEscapingTest()
{
    var result = String.Format("Foo {{0}}", "1,2,3");  //"1,2,3" is not parsed
    Assert.AreEqual("Foo {0}", result);

    result = String.Format("Foo {{{0}}}", "1,2,3");
    Assert.AreEqual("Foo {1,2,3}", result);

    result = String.Format("Foo {0} {{bar}}", "1,2,3");
    Assert.AreEqual("Foo 1,2,3 {bar}", result);

    result = String.Format("{{{0:N}}}", 24); //24 is not parsed, see @Guru Kara answer
    Assert.AreEqual("{N}", result);

    result = String.Format("{0}{1:N}{2}", "{", 24, "}");
    Assert.AreEqual("{24.00}", result);

    result = String.Format("{{{0}}}", 24.ToString("N"));
    Assert.AreEqual("{24.00}", result);
}
于 2016-05-06T16:48:54.820 に答える