2011-12-19 2 views
5

Sto provando a scrivere un generatore di codice utilizzando un'applicazione di console C#. Ora, quando scrivo questo, ricevo un errore:Ambito di scrittura ({) nella stringa nell'app console

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

Si dice "ingresso in formato sbagliato" Ho controllato che tutte le variabili erano corde, e lo sono. Quando ho provato

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

Ha funzionato perfettamente. C'è un modo per risolvere questo problema?

+0

Basta sfuggire le parentesi graffe con se stesse dove è necessario. – Centro

risposta

4

Supponendo che si desidera un letterale { inserita nel flusso, è necessario sfuggire a una tua { con ancora un'altra brace così:

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

Allo stesso modo per la fine-brace, questo è dettagliato nel MSDN FAQ per la formattazione di stringhe here. La sequenza {{ diventa { e }} diventa }.

Da quello che ho capito la vostra intenzione di essere, la piena affermazione nel vostro caso specifico sarebbe:

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

che dovrebbe dare qualcosa di simile:

sphere {<Arg0><Arg1> <Arg2> texture{Gold_Metal}} 
2

È necessario utilizzare {{ per "sfuggire" alla parentesi graffa. Writeln interpreta {{0} come 'letterale {' seguito da 0}, provocando l'errore di formato errato.

+0

Grazie! Ho provato a usare \ {ma non è andata molto bene. – SharkRetriever

0

Cambia quello che devi scrivere e vedi se funziona .. assicurati anche di convertire i tipi di variabile in cui hai .ToString(); avrebbe bisogno di sapere quali sono i tipi effettivi dichiarati .. incolla il codice in cui hai dichiarato pre, sprad e i

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