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

如何计算简单的C#字符串,c#,reflection,expression-trees,C#,Reflection,Expression Trees,我一直在阅读表达式树,我认为这是使用它们的一个很好的例子,但我似乎无法理解如何做到这一点 我有一组需要计算的字符串,它们都是以下类型: exp == exp , or exp != exp , or exp (<,>,>=,<=) exp if exp is Numerical Type. 并获取评估是否为真。我的问题是我如何沿着左边的“路径”旅行并获得值 我实现了一个带有反射和字符串解析的版本,它以某种方式完成了工作——除了当我们使用一个方法时,老实说,它根本没有那么

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

我有一组需要计算的字符串,它们都是以下类型:

exp == exp , or exp != exp , or exp (<,>,>=,<=) exp if exp is Numerical Type.
并获取评估是否为真。我的问题是我如何沿着左边的“路径”旅行并获得值


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

您可以使用代码生成库,如
CodeDOM
Roslyn
来生成将进行计算的Func

例如,在
Roslyn
中,您可以创建
会话
,并将包含
所有者
的对象设置为
会话的
主机对象
。然后,您可以根据需要在
会话中生成代码,如下所示:

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

现在,
result
将包含字符串的求值结果,而无需
反射
或字符串分析。

您可以使用代码生成库,如
CodeDOM
Roslyn
来生成进行求值的Func

例如,在
Roslyn
中,您可以创建
会话
,并将包含
所有者
的对象设置为
会话的
主机对象
。然后,您可以根据需要在
会话中生成代码,如下所示:

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

现在,
result
将包含字符串的求值结果,而无需
反射
或字符串分析。

您可以使用代码生成库,如
CodeDOM
Roslyn
来生成进行求值的Func

例如,在
Roslyn
中,您可以创建
会话
,并将包含
所有者
的对象设置为
会话的
主机对象
。然后,您可以根据需要在
会话中生成代码,如下所示:

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

现在,
result
将包含字符串的求值结果,而无需
反射
或字符串分析。

您可以使用代码生成库,如
CodeDOM
Roslyn
来生成进行求值的Func

例如,在
Roslyn
中,您可以创建
会话
,并将包含
所有者
的对象设置为
会话的
主机对象
。然后,您可以根据需要在
会话中生成代码,如下所示:

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

现在,
result
将包含字符串的求值结果,而不包含
反射
或字符串分析。

如果您想让我们向您解释代码,那么您应该先发布它。不,我有我的uses反射和字符串解析,我实际上想通过表达式来实现这一点。我将编辑以澄清无论发生什么-发布您迄今为止尝试过的内容-如果您没有尝试任何东西,并且希望我们做您的工作,那么您(与我一起)运气不好。不管怎么说,您误会了我,我并不是想完成工作,我实际上是想得到表达式树工作原理的解释,因为我现在意识到我对表达式树的概念是完全错误的。不知何故,我认为表达式树可以以某种方式解析字符串并对其求值,而无需我做太多工作。我现在觉得自己是个大傻瓜,不知怎么的我明白了。我目前正在做一些事情,我会发布我的想法。@Carsten,在那里我在过去30分钟左右的时间里已经完成了我目前的工作,我放弃了我做的反射,它进行得有些顺利,除了方法调用。如果你想让我们向你解释你的代码,那么也许你应该先发布它不,我使用反射和字符串解析,实际上我想通过表达式实现这一点。我将编辑以澄清无论发生什么-发布您迄今为止尝试过的内容-如果您没有尝试任何东西,并且希望我们做您的工作,那么您(与我一起)运气不好。不管怎么说,您误会了我,我并不是想完成工作,我实际上是想得到表达式树工作原理的解释,因为我现在意识到我对表达式树的概念是完全错误的。不知何故,我认为表达式树可以以某种方式解析字符串并对其求值,而无需我做太多工作。我现在觉得自己是个大傻瓜,不知怎么的我明白了。我目前正在做一些事情,我会发布我的想法。@Carsten,在那里我在过去30分钟左右的时间里已经完成了我目前的工作,我放弃了我做的反射,它进行得有些顺利,除了方法调用。如果你想让我们向你解释你的代码,那么也许你应该先发布它不,我使用反射和字符串解析,实际上我想通过表达式实现这一点。我将编辑以澄清无论发生什么-发布您迄今为止尝试过的内容-如果您没有尝试任何东西,并且希望我们做您的工作,那么您(与我一起)运气不好。不管怎么说,您误会了我,我并不是想完成工作,我实际上是想得到表达式树工作原理的解释,因为我现在意识到我对表达式树的概念是完全错误的。以某种方式