質問

使用時に括弧をエスケープするにはどうすればよいですか string.Format. 。例えば:

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

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

括弧をエスケープする方法はありますか?

役に立ちましたか?

解決

あなたがアウトプットするために foo {1, 2, 3} 次のようなことをする必要があります:

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

を出力するには { あなたが使う {{ そして出力するには } あなたが使う }}.

他のヒント

はい、出力します {string.Format このようにして逃げなければなりません {{

したがって、この

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

出力します "foo {1,2,3}".

ただし、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}

参考記事String.Format の付属品 そして文字列のフォーマットに関するよくある質問

もうすぐそこです!中括弧のエスケープシーケンスは次のとおりです。 {{ または }} したがって、あなたの例では次のように使用します。

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

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

逃げる 中括弧 そして使用 文字列補間 興味深い挑戦になります。使用する必要があります 四重括弧 から逃れるために 文字列補間 解析と string.format 解析中。

エスケープブラケット:文字列補間 $("") と String.Format

string localVar = "dynamic";
string templateString = $@"<h2>{0}</h2><div>this is my {localVar} template using a {{{{custom tag}}}}</div>";
string result = string.Format(templateString, "String Interpolation");

// OUTPUT: <h2>String Interpolation</h2><div>this is my dynamic template using a {custom tag}</div>

C# で (クラス/オブジェクトをシリアル化せずに) json 文字列をアドホックに構築する方法を探してここに来ました。言い換えれば、使用中に中括弧と引用符をエスケープする方法 C# の補間文字列 そして "逐語的な文字列リテラル" ('@' プレフィックスが付いた二重引用符の文字列)、たとえば...

var json = $@"{{""name"":""{name}""}}";
[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);
}

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

var value = "1, 2, 3";
var output = $" foo {{{value}}}";

私の目標:

値を割り当てる必要がありました "{CR}{LF}"string 変数 delimiter.

コードc#:

string delimiter= "{{CR}}{{LF}}";

注記:通常、特殊文字をエスケープするには、 を使用する必要があります。開始中括弧 { には、{{ のように 1 つ追加して使用します。閉じ中括弧 } には、追加の }} を 1 つ使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top