Как вы помещаете { и } в строку формата [дублировать]

StackOverflow https://stackoverflow.com/questions/160742

  •  03-07-2019
  •  | 
  •  

Вопрос

На этот вопрос уже есть ответ здесь:

Я пытаюсь сгенерировать некоторый код во время выполнения, куда я добавляю кое-какие вспомогательные материалы, и пользователю разрешается вводить фактический рабочий код.Мой код котельной выглядит примерно так:

using System;

public class ClassName
{
    public double TheFunction(double input)
    {
        // user entered code here
    }
}

В идеале, я думаю, я хочу использовать string.Format для вставки пользовательского кода и создания уникального имени класса, но я получаю исключение для строки format, если она не выглядит следующим образом:

string formatString = @"
using System;

public class ClassName
{0}
    public double TheFunction(double input)
    {0}
        {2}
    {1}
{1}";

Затем я вызываю string.Форматирую следующим образом:

string entireClass = string.Format(formatString, "{", "}", userInput);

Это нормально, и я могу справиться с уродством использования {0} и {1} в строке формата вместо моих фигурных скобок, за исключением того, что теперь мой пользовательский ввод также не может использовать фигурные скобки.Есть ли способ либо избежать фигурных скобок в моей строке формата, либо хороший способ превратить фигурные скобки в пользовательском коде в {0} и {1}?

Кстати, я знаю, что подобные вещи являются проблемой безопасности, ожидающей своего решения, но это приложение Windows Forms, предназначенное для внутреннего использования в системах, которые не подключены к сети, так что риск в данной ситуации приемлемый.

Это было полезно?

Решение

Спасайтесь от них, удваивая их:

string s = String.Format("{{ hello to all }}");
Console.WriteLine(s); //prints '{ hello to all }'

От http://msdn.microsoft.com/en-us/netframework/aa569608.aspx#Question1

Другие советы

"{{" и "}}"

Я думаю, ты хочешь вот чего...

string formatString = @"
using System;

public class ClassName
{{
    public double TheFunction(double input)
    {{
        {0}
    }}
}}";

string entireClass = string.Format(formatString, userInput);

Удвойте фигурные скобки: string.Format("{{ {0} }}", "Hello, World"); произвел бы { Hello, World }

Будьте особенно осторожны с тем, у кого есть доступ к приложению.Лучшим решением могло бы быть создание простого анализатора, который ожидает только несколько ограниченных команд.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top