Запись области ({) в строку в консольном приложении - PullRequest
5 голосов
/ 19 декабря 2011

Я пытаюсь написать генератор кода с помощью консольного приложения ac #.Теперь, когда я набираю это, я получаю сообщение об ошибке:

    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());

Это работало отлично.Есть ли способ это исправить?

Ответы [ 3 ]

4 голосов
/ 19 декабря 2011

Если вы хотите, чтобы литерал { был вставлен в поток, вам нужно экранировать вашу { с еще другой скобкой, таким образом:

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

Аналогично для конца-brace, это подробно описано в FAQ по форматированию строки MSDN здесь .Последовательность {{ становится {, а }} становится }.

Исходя из того, что я понимаю, ваше намерение представить полное заявление в вашем конкретном случае:

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

что должно дать вам что-то вроде:

sphere {<Arg0><Arg1> <Arg2> texture{Gold_Metal}}
2 голосов
/ 19 декабря 2011

Вам нужно использовать {{, чтобы «убежать» от фигурной скобки.Writeln интерпретирует {{0} как 'literal {', за которым следует 0}, что приводит к ошибке неправильного формата.

0 голосов
/ 19 декабря 2011

Измените то, что вы должны написать, и посмотрите, работает ли это ... также убедитесь, что вы конвертируете типы переменных, где у вас есть .ToString ();нужно знать, что представляют собой объявленные типы .. вставьте код в то место, где вы объявили pre, sprad и i

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