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