【发布时间】:2010-10-20 00:29:46
【问题描述】:
试图弄清楚如何利用 CSharpCodeProvider 在运行时编译字符串数据。
在 xml 中,我将相当于存储在字符串中的谓词条件。
我希望能够在当前上下文中执行并获得这些语句的结果。
例如当
<Condition>Value=="ABCD1234"</Condition> 被读取并执行,它应该在当前对象范围中查找值并根据语句的评估返回 true 或 false。
我认为我使用 CSharpCodeProvider 的方向是正确的,但是我能找到的所有示例都与编译为 .DLL 或 .EXE 相关,我真的只想在内存中编译,这样我就可以执行比较并返回 true或对应用程序的其他部分设置错误。
关于如何最好地解决这个问题的任何想法? CSharpCodeProvider 甚至是完成这项工作的最佳工具吗?
【问题讨论】:
-
“当前对象范围”是什么意思? CSharpCodeProvider 的结果将始终是一个程序集,这意味着您的“sn-p”必须存在于类中包含的方法中。因此,必须将“当前对象范围”作为您创建的封闭方法的参数自己进行检测。
-
不知道我明白了,这是解释器和编译器之间的区别。当然,CodeDom 会让它更快很多。不是因为字符串。
-
好吧,我只是想确保当我说
Value="stuff"时,值将是实例化对象的属性。 -
是的,但是如果您要手动编写该类以在之后由 C# 编译,您如何在没有额外引用的情况下访问
Value属性(例如obj.Value)?在这种情况下你不能继承,所以你必须在你的类中编写同名属性,将调用委托给原始实例。
标签: c#