gpt4 book ai didi

c# - 有点想了解 .NET 中的表达式树

转载 作者:太空狗 更新时间:2023-10-29 20:44:08 26 4
gpt4 key购买 nike

我已经阅读了几篇关于表达式树的文章和几篇 stackoverflow.com 帖子。这让我费尽心思去理解。

问题:

<我>1)和DOM(Document Object Model)一样,是逻辑的内存表示?

2) 有人解释说它是一种将可执行​​代码转换为数据的机制,使用它我们可以生成表示代码的数据结构。

这是否意味着,表达式树用于设计用户定义的模式?

3) 大多数示例显示与 Func<> 相关的表达式树委托(delegate)或其他委托(delegate),因此使用委托(delegate)和其他编程结构我们不能实现与表达式树服务相同的事情。

非常感谢初学者可以理解的解释。

最佳答案

表达式树表示单个表达式的语法树。

树的每个节点代表一些常量、对象成员引用或操作。

例如对于表达式 2 + 3 我们可以构建表达式树:

Expression.MakeBinary(
ExpressionType.Add,
Expression.Constant(2),
Expression.Constant(3));

此类树中最重要的是表达式,它允许以易于阅读的形式编写表达式,提醒签名匹配 TDelegate 的 lambda 函数。这是前

Expression<Func<int>> sum = () => 2 + 3; // much nicer, eh?

但是表达式不是委托(delegate),因为它不能直接执行。

相反,它可以被遍历,例如使用访问者对象来构建一些可执行表示。示例可以是使用 Expression.Compile() 的委托(delegate)构建或使用 CompiledQuery.Compile() 等从 LINQ 查询构建的 SQL 查询。

表达式树的另一个有用应用是使用它们来表示对象的成员,否则需要使用反射。反射使用字符串来表示成员名称,并且在编译时不进行检查。检查表达式树,因此可以少犯一些错误。

PropertyInfo prop1 = typeof(MyClass).GetProperty("Value");

Expression<Func<MyClass, int>> expr = mc => mc.Value;
PropertyInfo prop2 = (mc.Body as MemberExpression).Member as PropertyInfo;

关于c# - 有点想了解 .NET 中的表达式树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1588963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com