这不是实际用途,但有没有办法在C#中将字符串作为程序代码执行?
例如:
而不是写作
Console.WriteLine("blah blah blah");
我想写点像
string s = "Console.WriteLine(\"blah blah blah\")"
execute(s);
答案 0 :(得分:1)
我能想到的唯一方法是在运行时编译代码。这篇文章解释了如何执行此操作http://simeonpilgrim.com/blog/2007/12/04/compiling-and-running-code-at-runtime/
答案 1 :(得分:1)
我知道这并不是你要求的(虽然你没有提到字符串中的程序语言),但IronPython很酷:http://secretgeek.net/host_ironpython.asp,http://blogs.msdn.com/b/abhinaba/archive/2006/02/09/528416.aspx。
另外(正如boca已经提到的)运行时编译也运行良好:Is it possible to dynamically compile and execute C# code fragments?
答案 2 :(得分:1)
在C#中可能,但故意困难。没有简单的“exec()”功能,你可以开箱即用。
AFAIK这是设计。 Exec函数是一个巨大的安全漏洞,因为它们将语言的全部功能暴露给那些通常不具备这种能力的用户。作为程序员,你经常打算使用exec()函数来允许用户输入简单的数学或字符串表达式,突然你有一个黑客出现并实例化System.Net.WebClient并使用它来下载和执行某些东西更加恶意。没有办法限制允许哪些程序集。
.Net语言中的首选替代方案称为Domain Specific Language (DSL)。 DSL是一种(相对)简单的方法来定义您自己的语法(及其背后的含义),以确定您希望用户做什么样的事情,而没有让他们访问整个基类库的安全隐患。它还具有允许您提供比其他方式更高级别的专业操作的优势。
答案 3 :(得分:0)
您可以使用CodeDOM执行此操作。请参阅MSDN上的Using the CodeDOM。
答案 4 :(得分:0)
可以使用Microsoft.CSharp.CSharpCodeProvider完成此操作。
检查this。