を使用してブラケットをエスケープする方法string.Format
。
例えば:
String val = "1,2,3"
String.Format(" foo {{0}}", val);
この例は例外をスローしませんが、文字列を出力しますfoo {0}
。
括弧をエスケープする方法はありますか?
を使用してブラケットをエスケープする方法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);
を{
使用{{
して出力し、}
を使用して出力します}}
。
または、このようにc#文字列補間を使用することもできます(C#6.0で利用可能な機能)
ブラケットのエスケープ:文字列補間$( "")。C#6.0の新機能です
var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
//Output will be: foo {1, 2, 3}
$"a = {{ {a} }}"
)でも機能しています
string v = $" foo {{{t}}}";
ます。カーリーではないエスケープする他の文字がある場合は、$ @コンボを使用できますstring v2 = $@"\foo {{{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( "{{{0}}}", i.ToString("N") );
一部の人にとってより読みやすいかもしれないと書くでしょう。
中括弧をエスケープし、文字列補間を使用すると、興味深い課題が生じます。文字列補間の解析と解析をエスケープするには、四重括弧を使用する必要があります。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 inVal= "1, 2, 3";
var outVal= $" foo {{{inVal}}}";
//Output will be: foo {1, 2, 3}