コンソールアプリケーションの文字列にスコープ({)を書き込む

私は、C#コンソールアプリケーションを使用してコードジェネレータを記述しようとしています。今私がこれをタイプするとき、私はエラーを受け取る:

    Console.WriteLine("sphere {{0}{1} {2} texture{Gold_Metal}}", 
    pre, i.ToString(), sprad.ToString());

それは "間違った形式で入力"と言います私はすべての変数が文字列であることを確認しました。私が試したとき

    Console.WriteLine("sphere {0}{1} {2} textureGold_Metal", 
    pre, i.ToString(), sprad.ToString());

それは完璧にうまくいった。これを修正する方法はありますか?

5
あなたが必要とする場所で、中括弧をエスケープするだけです。
追加された 著者 Centro,

3 答え

リテラル {をストリームに挿入したい場合、別のブレースで {

Console.WriteLine("sphere {{{0}{1} {2} ...
                          ^^
                          ||-- see here.

同様に、終わりブレースについては、MSDN文字列の書式設定のFAQを参照してください。ここ {{ { }} のシーケンスは} になります。

私があなたの意思を理解することから、あなたの特定の事例における完全な陳述は次のようになります:

Console.WriteLine("sphere {{{0}{1} {2} texture{{Gold_Metal}}}}", 
    pre, i.ToString(), sprad.ToString());

それはあなたのようなものを与えるはずです:

sphere {  texture{Gold_Metal}}
4
追加された

中括弧を "エスケープ"するには、 {{]を使用する必要があります。 Writeln {{0} を 'literal {'の後に 0} として解釈し、フォーマットエラーが間違っています。

2
追加された
ありがとう!私は\ {を使ってみましたが、うまくいきませんでした。
追加された 著者 SharkRetriever,

これを書く必要があるものを変更し、それが動作するかどうかを確認してください。また、あなたが持っている変数型を変換していることを確認してください.ToString();実際に宣言された型が何であるかを知る必要があります。pre、sprad、およびiを宣言した場所にコードを貼り付けます

 Console.WriteLine(string.Format("sphere {0}{1} {2} textureGold_Metal", 
    pre, i.ToString(), sprad.ToString()));
0
追加された