使用時に角かっこをエスケープするにはどうすればよい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}}}";
// The output will be: foo {1, 2, 3}
はい、出力{
するには、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}
もうすぐです!中括弧のエスケープシーケンスは、{{
次の}}
ようになります。
string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);
二重開き括弧と二重閉じ括弧を使用すると、ページに 1 つの括弧のみが表示されます。
[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);
}