如何计算一个简单的c#字符串



我一直在阅读表达式树,我认为这是使用它们的一个很好的例子,但我似乎仍然无法掌握这将如何完成。

我有一组要求值的字符串,它们的类型都是

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

exp不需要检查它们是否有效,如果它们无效,我可以接受它们爆炸。

我的问题是,我如何解析得到实际的obj.

我想在

下面传递这样一个字符串
Owner.Property.Field == 3;
or
Owner.Field == 3;
or 
Owner.Method(1) == true

,求值是否为真。我的问题是我如何沿着左边的"路径"旅行并获得值?

我实现了一个具有反射和字符串解析的版本,它以某种方式完成了工作-除了当我们使用方法时,老实说它根本没有那么高的性能。我希望这是尽可能高性能,如果可能的话,给我一个小的解释表达式是如何工作的,所以我可以学习。

您可以使用代码生成库,如CodeDOMRoslyn来生成执行求值的Func。

例如,在Roslyn中,您可以创建Session,并将包含Owner的对象设置为SessionHost object。那么您就可以在Session中生成您希望的代码,如下所示:

Session session = ScriptEngine.CreateSession(objectContainingOwnerAsProperty);
bool result = session.Execute<bool>("Owner.Field == 8");

现在result将包含没有reflection和字符串分析的字符串的计算结果。

相关内容

  • 没有找到相关文章

最新更新