2011-12-19 10 views
5

Estoy tratando de escribir un generador de código usando una aplicación de consola C#. Ahora, cuando escribo esto, recibo un error:Ámbito de escritura ({) en cadena en la aplicación de consola

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

Dice "de entrada en un formato incorrecto" He comprobado que todas las variables son cadenas, y lo son. Cuando probé

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

Funcionó perfectamente bien. ¿Hay alguna manera de arreglar esto?

+0

Simplemente escape las llaves con ellos mismos cuando lo necesite. – Centro

Respuesta

4

Suponiendo que desea un literal { se inserta en la corriente, lo que necesita para escapar de una su { con todavía otra corsé de este modo:

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

Del mismo modo para el final-corsé, esto se detalla en el MSDN formato de cadena de preguntas frecuentes here. La secuencia {{ se convierte en { y }} se convierte en }.

Por lo que entiendo su intención de ser, la declaración completa en su caso específico sería:

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

que se debe dar algo como:

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

Es necesario utilizar {{ a "escapar" del corsé. Writeln interpreta {{0} como 'literal {' seguido de 0}, lo que da como resultado un error de formato incorrecto.

+0

Gracias! Intenté usar \ {pero eso no fue tan bien. – SharkRetriever

0

Cambie lo que tiene que escribir esto y vea si funciona ... también asegúrese de que está convirtiendo los tipos de variable donde tiene .ToString(); necesitaría saber cuáles son los tipos declarados reales. Pegue el código donde ha declarado pre, sprad e i

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