gpt4 book ai didi

.net-3.5 - 在表达式树中实现 Not,.net 4

转载 作者:行者123 更新时间:2023-12-04 22:17:06 26 4
gpt4 key购买 nike

是否可以实现一个 ! (不)使用表达式树。我有兴趣创建一个 C# eval 类,该类将解析和评估包含 true、false、||、&& 和 ! 的逻辑表达式。我知道 && 和 || .NET 4 表达式树目前支持,但我想知道它们是否是一种实现 summat 的方法,如 !(x && y) || z 其中 z=false、y=true 和 z=false。

目前我正在使用基于标准堆栈的标记器、解析器、评估器来评估这些类型的表达式,但如果可以创建并即时执行合适的表达式树,我会很乐意将其转储。

最佳答案

我通常发现值得编写一个 lambda 表达式来完成我想要的,然后看看 C# 编译器用它做什么。

所以这段代码:

Expression<Func<bool,bool>> func = x => !x;

被编译成:
ParameterExpression expression2;
Expression<Func<bool, bool>> expression =
Expression.Lambda<Func<bool, bool>>(Expression.Not(
expression2 = Expression.Parameter(typeof(bool), "x")),
new ParameterExpression[] { expression2 });

(为格式道歉 - 很难知道该怎么做。)

这是使用 Reflector 反编译的,但其“优化”设置为 .NET 2.0 以避免使用 lambda 语法。

一旦你通过垃圾,你会看到它正在使用 Expression.Not . && 使用 Expression.AndAlso , 和 ||用途 Expression.OrElse .

关于.net-3.5 - 在表达式树中实现 Not,.net 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2165048/

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