2011-02-01 11 views
2

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

+1

С вопросами, как это это хорошая идея, чтобы объяснить, почему вы хотите это поведение, так как это явно не часто , Делая так, есть шанс, что кто-то может предложить более элегантное решение, которое даст более конкретное поведение, которое вы пытаетесь достичь. –

+0

На самом деле, мне тоже хотелось бы ответить на этот вопрос. Некоторое время я подумывал о написании стиля стиля Python для C#, используя отражение или подобное. Я знаю, что некоторые из них существуют, но использование уже написанного уже не является отличным учебным упражнением - одна из причин, по которой я отказываюсь использовать любые библиотеки вне .net в своих приложениях - мне нравится самим изучать вещи. – dotalchemy

ответ

1

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

4

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

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