2008-10-02 4 views
21

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

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}?

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

+0

Это проблема безопасности, потому что код, который может выполнить пользователь, может быть буквально любым, а не потому, что он подключен к сети. – MusiGenesis 2008-10-02 03:27:44

+0

На самом деле нет, просто потому, что код может быть чем-то, что не дает пользователю возможности делать все, что он не мог сделать раньше. Приложение работает в том же контексте, что и пользователь, и только тот, кто имеет доступ к машине, на которой он работает, может ввести код. – 2008-10-09 19:42:23

ответ

1

Double брекеты: string.Format("{{ {0} }}", "Hello, World"); будет производить { Hello, World }

5

Что Я думаю, вы хотите это ...

string formatString = @" 
using System; 

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

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

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