Ответ 1
Побегите их, удвоив их:
string s = String.Format("{{ hello to all }}");
Console.WriteLine(s); //prints '{ hello to all }'
От http://msdn.microsoft.com/en-us/netframework/aa569608.aspx#Question1
Я пытаюсь создать некоторый код во время выполнения, где я помещаю некоторые элементы котельной, и пользователю разрешено вводить фактический рабочий код. Мой код котельной выглядит примерно так:
using System;
public class ClassName
{
public double TheFunction(double input)
{
// user entered code here
}
}
В идеале, я думаю, что я хочу использовать string.Format, чтобы вставить код пользователя и создать уникальное имя класса, но я получаю исключение в строке формата, если оно не выглядит так:
string formatString = @"
using System;
public class ClassName
{0}
public double TheFunction(double input)
{0}
{2}
{1}
{1}";
Затем я вызываю string.Format следующим образом:
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
"{{" and "}}"
Я думаю, что вы хотите...
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 }
Будьте особенно осторожны, у кого есть доступ к приложению. Лучшим решением может быть создание простого анализатора, который ожидает только нескольких ограниченных команд.