2

是否可以从字符串变量执行代码,例如:
string mystring = "Console.WriteLine(\"Hi\");"; 是否可以执行 mystring 的内容(打印“Hi”)?

4

4 回答 4

4

可以使用 System.Reflection.Emit 或 System.CodeDom 命名空间,但这并不是一个好主意,因为没有机制来控制哪些命名空间是允许的,哪些是不允许的。用户可以构建一个字符串来擦除您的硬盘驱动器。

类似 eval() 的函数是巨大的安全漏洞,应该避免。首选的替代方案是DSL(领域特定语言)

于 2011-02-01T05:08:22.253 回答
1

是的。在运行时启动编译器并传入您的代码。它会吐出可执行代码。查看System.CodeDom命名空间,尤其是System.CodeDom.Compiler.

于 2011-02-01T05:07:30.063 回答
1

使用代码 DOM

于 2011-02-01T05:07:32.963 回答
1

需要使用反射来获得类似的东西。C# 不是动态或解释型语言,所以你不能开箱即用

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

如何动态评估 C# 代码?

于 2011-02-01T05:08:44.270 回答