是否可以创建自定义表达式类?如果可以,有没有任何示例?继承框架抽象Expression类存在问题,因为它的构造函数需要一个ExpressionType参数,这是一个框架枚举类型 - 我显然无法自定义!
有什么想法吗?
是否可以创建自定义表达式类?如果可以,有没有任何示例?继承框架抽象Expression类存在问题,因为它的构造函数需要一个ExpressionType参数,这是一个框架枚举类型 - 我显然无法自定义!
有什么想法吗?
使用 .net 3.5 不可以这样做,因为 Expression 构造函数需要一个 ExpressionType 枚举值,而你不能向枚举中添加新的节点类型。
你也不能重载现有的节点类型,因为你不能从任何“叶子类”(如 BinaryExpression)继承,因为它们都是密封的。
根据 MSDN 文档,在 CLR v4 中看起来可以做到这一点,只要你覆盖 “Reduce” 方法并使用节点类型 ExpressionType.Extension。
这正是 codeplex 上的 DLR 代码所必须做的事情;最终,他们重新创建了整个代码库 (在我记得的情况下)但使用了不同的命名空间, 直到 4.0 版本发布.
这不一定与 C# 编译器兼容; 我老实说没有尝试过.
不属于.NET公共节点集合的Expression派生类应返回节点类型Extension
我不相信你可以扩展Expression,但我认为你可以添加一些扩展方法来创建表达式树以简化生成过程。
例如,也许你总是喜欢比较两个字符串,所以你可以添加一个扩展方法来返回执行比较的树。你还可以添加一个调用代码中其他地方函数的表达式,这样你只需要为必须以这种方式开发的内容编写表达式树。