C # выполняет переменную код - PullRequest
2 голосов
/ 01 февраля 2011

Возможно ли выполнить код из строковой переменной, например:
string mystring = "Console.WriteLine (\" Hi \ ");"; Можно ли выполнить содержимое mystring (печать «Привет»)?

Ответы [ 4 ]

4 голосов
/ 01 февраля 2011

Это возможно с использованием пространств имен System.Reflection.Emit или System.CodeDom, но это не совсем хорошая идея, поскольку нет механизма для контроля того, что такое пространства имен, а какие нет. Пользователь может создать строку, которая уничтожит ваш жесткий диск.

eval () - подобные функции - это огромные дыры в безопасности, и их следует избегать. Предпочтительной альтернативой является DSL (предметно-ориентированный язык) .

1 голос
/ 01 февраля 2011

Нужно использовать отражение, чтобы получить что-то подобное. C # не является динамическим или интерпретируемым языком, поэтому вы не получаете его из коробки

http://www.codeproject.com/KB/dotnet/Expr.aspx

Как динамически оценивать код C #?

1 голос
/ 01 февраля 2011

Используйте код DOM

1 голос
/ 01 февраля 2011

Да. Запустите компилятор во время выполнения и передайте ваш код. Это выплюнет исполняемый код. См. Пространство имен System.CodeDom, особенно System.CodeDom.Compiler.

...