Как вы помещаете { и } в строку формата [дублировать]
-
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 }
Будьте особенно осторожны с тем, у кого есть доступ к приложению.Лучшим решением могло бы быть создание простого анализатора, который ожидает только несколько ограниченных команд.