2


1

{0}を解析しないString.Formatを取得する方法

私は次のような行を頻繁に持つコード生成ツールを書いています

StringBuilder sp = new Stringbuilder();
sp.AppendFormat("        public {0}TextColumn()\n", className);
sp.AppendLine("        {"
sp.AppendLine("            Column = new DataGridViewTextBoxColumn();");
sp.AppendFormat("            Column.DataPropertyName = \"{0}\";\n", columnName);

しかし、私が抱えている問題は、このような行に走ったときです。

sp.AppendFormat("return String.Format(\"{0} = '{0}'\", cmbList.SelectedValue);", columnName);

columnNameの値に関係なく最初の {0}`を有効にしたいのですが、内部の `String.Format`が正しく処理するようにseccond {0} `をそのままにしておきたいです。

これをどうやってやるの?

5 Answer


13


二重中括弧を使用します。

string result = string.Format("{{Ignored}} {{123}} {0}", 543);


7


中括弧は、2つの中括弧文字を使用してエスケープできます。 http://msdn.microsoft.com/en-us/library/fht0f5be%28v=VS.90%29.aspx [string.Format]のドキュメントには次のように記載されています。

_ 形式で単一のリテラル中括弧文字を指定するには、先頭または末尾の2つの中括弧文字を指定します。つまり、「\ {\ {」または「}}」です。 _

あなたの例では

sp.AppendFormat("return String.Format(\"{0} = '{{0}}'\",cmbList.SelectedValue);",
    columnName);


3


sp.AppendFormat("return String.Format(\"{0} = '{{0}}'\", cmbList.SelectedValue);", columnName);


3


「\ {\ {0}}」を使用します。 これにより、文字列「\ {0}」が生成されます


1


String.Format(\"{0} = '{{0}}'\",