如何评估一个简单的C#字符串

时间:2015-09-13 10:00:49

标签: c# reflection expression-trees

我一直在阅读表达树,我认为这是使用它们的一个很好的例子,我仍然无法理解如何做到这一点。

我有一组我想要评估的字符串,它们都是以下类型:

exp == exp , or exp != exp , or exp (<,>,>=,<=) exp if exp is Numerical Type.

exp不需要检查它们是否有效我很好,如果不是它们会爆炸。

我的问题是,如何解析以获得实际的对象。

我想传递下面的字符串

Owner.Property.Field == 3;

or

Owner.Field == 3;

or 

Owner.Method(1) == true

如果评估是真的,那就得到。我的问题是如何沿着&#34;路径前进?在左边并获得值?

我实现了一个带有Reflection和字符串解析的版本,它以某种方式完成了工作 - 除了我们使用方法的时候,老实说它本身并不是那么高效。我希望这能尽可能高效,如果可能的话,给我一个关于表达式如何工作的小解释,这样我就可以学习。

1 个答案:

答案 0 :(得分:3)

您可以使用代码生成库(如CodeDOMRoslyn)生成将执行评估的Func。

例如,在Roslyn中,您可以创建Session并将包含Owner的对象设置为Host object的{​​{1}}。您可以按照以下方式生成Session中的代码:

Session

现在Session session = ScriptEngine.CreateSession(objectContainingOwnerAsProperty); bool result = session.Execute<bool>("Owner.Field == 8"); 将包含不带result字符串的评估结果,也不包含字符串分析。