我正在尝试使用 .Net 3.5 中的 Expression 树和 Lamdba Expression 对象来允许我动态计算用户输入的布尔表达式。
到目前为止,用户可以创建一个表达式树,其中包含BinarayExpressions
表示为的 AND 和 OR 值ParameterExpressions
。然后我计划LambdaExpression
基于该树创建一个,以便我可以将表达式编译成一个委托,然后我可以调用它。我遇到的问题是我不知道用户需要多少输入参数,所以当我将表达式编译成委托时,我不知道方法签名应该是什么,直到运行时。
到目前为止,我提出了两种可能的解决方案。
- 创建一大堆委托,例如
Func<bool, bool, bool...>
可以采用我认为用户可能需要的尽可能多的参数的委托。这感觉不是最优雅的解决方案,但我认为它会起作用,直到有人想要使用比我满足的更多的参数。 - 传入一个值数组,并使用数组索引器以某种方式将它们分配给我的参数。我已经考虑过这一点,但无法弄清楚它是如何工作的。
注意:它需要很快,所以没有拳击或类似的东西。