当前位置: 首页 > 编程语言 > C#

浅懂.NET中的表达式树分享

时间:2023-04-10 11:10:20 C#

浅浅理解.NET中的表达式树看了好几篇关于表达式树的文章和几篇stackoverflow.composts。它让我的大脑想通了。问题:1)与DOM(文档对象模型)一样,它是逻辑的内存表示吗?2)解释说这是一种将可执行??代码转换为数据的机制,使用该机制可以生成表示代码的数据结构。这是否意味着表达式树用于设计用户定义的模式?3)大多数示例将表达式树与Func委托或其他委托结合使用,因此使用委托和其他编程结构无法实现与表达式服务相同的功能。非常感谢初学者可以理解的解释。表达式树表示单个表达式的语法树。树的每个节点代表一些常量、对象成员引用或操作。例如,对于表达式2+3,我们可以构建和表达树:Expression.MakeBinary(ExpressionType.Add,Expression.Constant(2),Expression.Constant(3));这些树中最重要的是Expression,它允许以人类可读的形式编写表达式,提醒lambda函数签名与TDelegate匹配。这就是前身Expression>sum=()=>2+3;//好多了,嗯?但是Expression不是委托,因为它不能直接执行。相反,它可以被遍历,例如使用访问者对象来构建一些可执行表示。示例可以是Expression.Compile()或使用CompiledQuery.Compile()等从LINQ查询构建的SQL查询的委托构造。表达式树的另一个有用应用是使用它们来表示对象的成员,否则这些对象将需要使用反射。反射使用字符串来表示成员名称,并且在编译时不检查。检查表达式树,这样可以减少一些错误。PropertyInfoprop1=typeof(MyClass).GetProperty("值");表达式>expr=mc=>mc.Value;PropertyInfoprop2=(mc.BodyasMemberExpression).MemberasPropertyInfo;表达式是将代码操作表达为对象模型的通用方法。这在4.0中扩展了很多,但这是我经常使用的领域;我在这里有一些博客要点,或者另一种尝试在InfoQ上解释它的全部内容。我也多次讨论过这个主题——也许可以尝试在这里下载(但没有这些词就没有多大意义;抱歉)。我会说实话;这不是一个简单的主题——但是当你理解它时,它会非常强大。从上面的内容开始,我可能会从InfoQ开始。这是一篇解释基础知识的文章...简而言之:1)基本上,是的,它是逻辑的内存表示。2)它可以被编译成MSIL(或者,像其他语言的LINQ-to-SQL一样)。3)使用Func委托,因为它们用于将表达式表示为可调用函数(在内部编译为MSIL)。我试图在以下博客文章中回答C#FAQ博客上的一个问题:在VisualStudio2010中使用表达式树生成动态方法。是的,它在内存中。我不明白你所说的“用户定义模式”是什么意思,但你可以用它来编写动态代码。不,你不能用代理替换ET,因为你不能在运行时修改代理。唯一的选择可能是MSIL,它更难读写。我不是这方面的专家,但我会尽力扫清障碍。将表达式树视为类型反射。这是了解函数功能(如操作数、参数和内容)的简单方法。所以,1)我会说。2)不完全......你应该先学习这个功能(我也是)然后找到对它有用的东西。你在生成代码吗?对我来说,这可能是表达式树的一个非常有用的功能3)表达式树这是一个新功能,但以前没有什么是你做不到的。现在更容易了。这是一篇解释基础知识的好文章。以上就是C#学习教程:对.NET中表达式树分享的所有内容略有了解。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: