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 gottach および 文字列フォーマットFAQ
もうすぐそこ!中括弧のエスケープシーケンスは{{
または}}
なので、あなたの例では次のようにします。
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
あなたはあなたのページに一つの括弧だけを表示することになる二重の開き括弧と二重の閉じ括弧を使うことができます。
中括弧 AND 文字列補間の使用 は、興味深い課題になります。 文字列補間 parsingおよび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#で Interpolated Stringsを使用しながら中括弧と引用符をエスケープする方法 "と" 逐語的な文字列リテラル "( '@'プレフィックス付きの二重引用符で囲まれた文字列).
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つ追加します。中括弧{}を閉じるには、追加の}}}を使用します。