最好的方法是评估如下表达式:
(A 和 B)或(A 和 C)或(不是 B 和 C)
或者
(A && B) || (A && C) || (!B && C)
在运行时,我计划将上述表达式转换为以下内容:
(对与错)或(对与错)或(不对与错)
或者
(真&&假)|| (真&&假)|| (! 假 && 真)
条件: 1) 直到运行时才知道逻辑表达式。 2) number 变量和它们的值直到运行时才知道。 3) 变量值永远不会为空。
我知道我可以创建一个简单的程序集,其中包含一个类和一个在运行时根据输入生成的方法,但有没有更好的方法。 我以前做过这个。使用字符串生成器编写代码,然后调用编译器。之后,加载程序集并调用该方法。
建议?
谢谢。
最佳答案
如果您使用的是 .NET3.5,那么您可以解析文本并使用 Expression 类创建抽象语法树。然后创建一个合适的 LambdaExpression 实例并将其编译成一个委托(delegate),然后您可以执行它。
为这种相当简单的语法构建解析器和语法树构建器是一项非常有趣的练习,并且执行速度比调用编译器快一些(而且在我看来它也更整洁)。
如果您不使用 .NET3.5,那么自己实现一个解释型抽象语法树也不复杂。
关于c# - C# 或 VB 中的动态逻辑表达式解析/评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/350181/