带返回值的动态 Linq 表达式

2023-12-28

我需要创建一个动态 linq 表达式,然后我开始使用许多示例。我测试了一些工作,有些没有。在这种情况下,我想创建一个如下所示的方法:

public bool Check(int intvar)
{
   if ( i > 2 )
     return true;
   else
     return false;
}

现在我写了以下内容:

LabelTarget returnTarget = Expression.Label("label");
ParameterExpression para = Expression.Parameter(typeof(int), "intvalue");
Expression test = Expression.GreaterThan(para, Expression.Constant(5));
Expression iftrue = Expression.Return(returnTarget, Expression.Constant(true));
Expression iffalse = Expression.Return(returnTarget,                   Expression.Constant(false));
Expression.IfThenElse(test, iftrue, iffalse);

this.TheExpression = Expression.IfThenElse(test, iftrue, iffalse);
Expression.Lambda<Action<int>>(
this.TheExpression,
new ParameterExpression[] { para }
).Compile()(5);

现在它抛出InvalidOperationException:

无法跳转到标签“label”`

怎么了 ?我只需要返回 true 或 false。


你需要改变一些事情:

  • 正如 René 建议的那样,将返回标签放在块表达式中的函数底部。这就是你的return语句会跳转。

  • 将 Lambda 声明为类型Func<int, bool>。由于您想要一个返回值,因此这需要是一个函数,而不是一个操作。

  • 声明returnTarget标签为类型bool。由于块表达式的返回值是其最后一条语句的值,因此标签必须是正确的类型。

  • 为最终标签提供默认值(= 如果通过正常控制流而不是通过普通控制流到达标签,则为函数的返回值)return陈述)。

    LabelTarget returnTarget = Expression.Label(typeof(bool));
    ParameterExpression para = Expression.Parameter(typeof(int), "intvalue");
    Expression test = Expression.GreaterThan(para, Expression.Constant(5));
    Expression iftrue = Expression.Return(returnTarget, Expression.Constant(true));
    Expression iffalse = Expression.Return(returnTarget, Expression.Constant(false));
    
    var ex = Expression.Block(
        Expression.IfThenElse(test, iftrue, iffalse),
        Expression.Label(returnTarget, Expression.Constant(false)));
    
    var compiled = Expression.Lambda<Func<int, bool>>(
        ex,
        new ParameterExpression[] { para }
    ).Compile();
    
    Console.WriteLine(compiled(5));     // prints "False"
    Console.WriteLine(compiled(6));     // prints "True"
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带返回值的动态 Linq 表达式 的相关文章

随机推荐

  • 检查字符串是否至少包含 10 个数字、12 个大写字母和 20 个小写字母

    至少有 10 个数字 12 个大写字母和 10 个小写字母的正则表达式可能是什么 该字符串可以以上述任何一个开头 并且可以是随机的 放置 例如 AB12jgGGfWisLWfoi34R32SgD42DSf3453jfh I used d d
  • 省略空自定义类型的 JSON

    我正在尝试为可能的情况编写一个自定义封送拆收器nil数据库类型 它的结构与sql NullFloat64 type type NullFloat64 sql NullFloat64 func ni NullFloat64 MarshalJS
  • React Native 键盘白色闪烁

    在我的 React Native 应用程序中显示和隐藏键盘时 键盘所在的位置会出现白色闪烁 请参阅以下内容 https photos app goo gl Bwmin9T1R4OAO9tB3 https photos app goo gl
  • Spring @ExceptionHandler 不适用于 @ResponseBody

    我尝试为rest 控制器配置一个spring 异常处理程序 该控制器能够根据传入的accept 标头将映射渲染到xml 和json 它现在抛出 500 servlet 异常 这有效 它获取了 home jsp ExceptionHandle
  • 向 python 对象添加新的成员变量?

    我已经开始阅读 Magnus Lie Hetland 的 Beginning python from novice to professional 今天让我印象深刻的是对象创建新成员变量的能力 即使这些成员变量不存在于该对象所在的类中被 创
  • 使用 wpf 中的自定义 TextElement 扩展 FlowDocument

    我想通过创建我自己的 Span 和 Run 衍生产品来扩展 FlowDocument 的功能 这可能吗 有人找到任何例子吗 微软没有公开渲染自定义所需的方法文本元素 http msdn microsoft com en us library
  • WildFly (JBoss) 下的 JTDS 模块

    我正忙着从 JBoss 7 1 1 升级到 Wildfly 8 0 0 Beta1 我在 JBoss 下使用 JTDS 数据库驱动程序没有问题 但它在 WildFly 下无法工作 我已经创建了 net sourceforge jtds ma
  • Pycharm - 在调试器中启用自动换行

    例如 在 Pycharm 2017 3 的调试器中 当我打印一本大字典时 它全部在一行上 我希望这本词典能够换行 这样我就可以看到更多内容 我相信以前版本的 PyCharm 具有这种包装行为 我查看了设置 只能找到编辑器的自动换行 For
  • 如何知道MKMapView的visibleMapRect是否包含坐标?

    如果我有 MKMapView 和 CLLocationCooperative2D 如何测试地图的可见区域是否包含坐标 最快的方法是使用内置的苹果功能 这将使此类事情变得超级快 if MKMapRectContainsPoint mapVie
  • 附加操作按钮在 Flask-admin 上不起作用

    我正在尝试向 Flask admin 表单添加一项操作 它必须增加评级 1 并且它适用于批量操作 但不适用于单个操作 请帮我找到这个错误 我花了很多时间试图让这个东西正常工作 这是代码 我在 templates 文件夹中制作了一个 html
  • 我可以更改 Azure Function Event Hub 触发器启动检查点吗?

    当我使用新的消费者组建立一个新的 Azure Function 来侦听我们的事件中心时 它会获取曾经发送到事件中心的所有消息 甚至是几个月前的消息 我认为将集线器上的消息保留设置为一天会限制这一点 但显然不是 不管怎样 我真的只希望新的 A
  • 收到“未安装 qmlscene”。 “Ubuntu”上“QT CREATOR”中的警告

    我将 QTStatic 添加到 QT 版本 但我无法使用此版本在套件选项卡中构建和设置 我上传了下面的屏幕截图 请帮助 版本选项卡屏幕截图 https i stack imgur com rpaGB jpg 套件选项卡屏幕截图 https
  • 如何在 Rails 视图中呈现所有评论?

    我是 Rails 新手 所以放轻松 我创建了一个博客 我已成功实施评论并将其附加到每个帖子中 现在 我想在侧边栏中显示所有帖子的最新评论列表 我认为这里涉及两件事 对comment controller rb的更新 然后是从实际页面的调用
  • postgresql - 替换文本字段中字符串的所有实例

    在 postgresql 中 如何替换数据库列中字符串的所有实例 假设我想替换所有实例cat with dog 例如 最好的方法是什么 你想使用 postgresql 的replace http www postgresql org doc
  • Ant 任务

    我现在看到 Ant 既有
  • 如何访问iOS中的弱链接框架?

    我想在 iOS 5 上使用 Twitter 框架 但能够在旧操作系统中运行我的应用程序 我在 Xcode 4 2 Target 设置中添加了弱引用框架 即设置 可选 标志 基础 SDK 是 iOS 5 iOS 部署目标是 iOS 3 2 接
  • 如何将第三方 npm 包与 ember cli 应用程序一起使用

    EDIT 这实际上是关于任何不适合与 ember 一起使用的 npm 包 就我而言 我尝试让 crypto js 工作 但对于任何不是专门为 ember cli 设计的 npm 包来说 似乎总是遇到同样的问题 我想在我的 ember 应用程
  • Python 错误代码已升级

    考虑一个 python 脚本 error py import sys sys exit 3 Invoking python error py echo 产生预期的 3 但是 考虑 runner py import os result os
  • 在 Android 应用程序中使用个人证书

    我希望用户能够在从生成证书的网站安装后将他们自己的个人证书安装到我的 Android 应用程序中 但是当我使用 WebClient 或 Android 浏览器浏览它时 安全存储会弹出并安装它 在版本 14 Android 4 0 之前 AP
  • 带返回值的动态 Linq 表达式

    我需要创建一个动态 linq 表达式 然后我开始使用许多示例 我测试了一些工作 有些没有 在这种情况下 我想创建一个如下所示的方法 public bool Check int intvar if i gt 2 return true els