是否可以创建自定义Expression类?如果是这样,有没有人有任何例子?继承自框架抽象Expression类带来了一个问题,因为它的构造函数采用ExpressionType参数,这是一个框架枚举类型 - 我显然无法自定义它!
有什么想法吗?
答案 0 :(得分:2)
使用.net 3.5,您无法执行此操作,因为Expression构造函数接受ExpressionType枚举值,并且您无法将新节点类型添加到枚举中。
您也不能重载现有节点类型,因为您无法从任何“叶类”(如BinaryExpression)继承,因为它们都是密封的。
根据MSDN文档,您可以在CLR v4中执行此操作,只要您覆盖“Reduce”方法并使用节点类型ExpressionType.Extension。
答案 1 :(得分:1)
这正是codeplex上的DLR代码所必须做的;最后,他们重新创建了整个代码库in a different namespace(IIRC),直到4.0发布。
这不一定适合C#编译器;老实说,我没有尝试过。
答案 2 :(得分:0)
我不相信你可以扩展Expression,但我认为你可以添加几个扩展方法来创建表达式树来简化生成。
例如,您可能总是喜欢比较2个字符串,因此您可以添加一个扩展方法,该方法将返回树进行比较。您还可以添加一个在代码中的其他位置调用函数的表达式,这样您就只能为绝对必须以这种方式开发的东西编写表达式树。
答案 3 :(得分:0)
我自己也没有尝试过,但我同意Scott的说法,即这应该适用于4.0。
具体来说,Expression Tree Spec on CodePlex说明了NodeType属性:
表达式的派生不是 在.NET中的公共节点集中 应返回节点类型扩展