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

How to evaluate a simple C# string

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

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

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

并获取评估是否正确。我的问题是如何沿着左侧的 "path" 行进并获取值?

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

您可以使用 CodeDOMRoslyn 等代码生成库来生成将执行计算的 Func。

例如,在Roslyn中你可以创建一个Session并设置一个包含Owner的对象作为SessionHost object。比您可以根据需要在 Session 中生成代码,如下所示:

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

现在 result 将包含您的字符串的评估结果,无需 reflection 或字符串分析。