如何在“sub”表达式中使用lambda表达式参数?

2023-11-29

我希望能够构建类似以下委托的表达式:

Func<object[], object> createSomeType1 = (args) =>
{
    return new SomeType1((P1)args[0], (P2)args[1], (P3)args[2]);
};

我刚刚开始手工制作表达式,所以如果这是一个相当简单的问题(或者我误解了某些东西),请原谅。

我知道要创建具有正确类型的构造函数,我会执行以下操作:

var p1 = Expression.Parameter(typeof(P1));
var p2 = Expression.Parameter(typeof(P2));
var p3 = Expression.Parameter(typeof(P3));
var someType1Exp = Expression.New(constructorInfo, p1, p2, p3);

然后我知道“外部”lambda 是这样声明的:

Expression<Func<object[], object>>.Lambda<Func<object[], object>>(
            someType1Exp,
            Expression.Parameter(typeof(object[])));

我无法理解如何将参数从外部表达式“传递”到内部表达式,然后将其转换为正确的类型。

任何正确方向的提示都会受到赞赏。


我使用的是 iPod,所以目前无法给出完整的示例:但是:

  • 声明一个类型为 object[] 的参数 (Expression.Param(typeof(object[])))并将其存储在变量中
  • 对于数组中的每一项,使用数组indexer获取索引器的表达式,并且“Convert” 或“cast”(又是 iPod!)来投射它
  • use Expression.Invoke,传递内部表达式加上上面生成的索引器+强制转换

如果您需要的话,我很乐意稍后做一个完整的示例(当我在电脑上时)


完整示例:

Type[] types = new Type[] { typeof(int), typeof(float), typeof(string) };

var constructorInfo = typeof(SomeType).GetConstructor(types);
var parameters = types.Select((t,i) => Expression.Parameter(t, "p" + i)).ToArray();
var someType1Exp = Expression.New(constructorInfo, parameters);
var inner = Expression.Lambda(someType1Exp, parameters);

var args = Expression.Parameter(typeof(object[]), "args");          
var body = Expression.Invoke(inner,
    parameters.Select((p,i) => Expression.Convert(Expression.ArrayIndex(args, Expression.Constant(i)), p.Type)).ToArray());
var outer = Expression.Lambda<Func<object[], object>>(body, args);
var func = outer.Compile();

object[] values = {1, 123.45F, "abc"};
object obj = func(values);
Console.WriteLine(obj);

或者作为单个表达式:

Type[] types = new Type[] { typeof(int), typeof(float), typeof(string) };   
var constructorInfo = typeof(SomeType).GetConstructor(types);

var args = Expression.Parameter(typeof(object[]), "args");          
var body = Expression.New(constructorInfo,
    types.Select((t,i) => Expression.Convert(Expression.ArrayIndex(args, Expression.Constant(i)), t)).ToArray());
var outer = Expression.Lambda<Func<object[], object>>(body, args);
var func = outer.Compile();

object[] values = {1, 123.45F, "abc"};
object obj = func(values);
Console.WriteLine(obj);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在“sub”表达式中使用lambda表达式参数? 的相关文章

  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 为什么 Google 测试会出现段错误?

    我是 Google Test 的新手 正在尝试提供的示例 我的问题是 当我引入失败并设置GTEST BREAK ON FAILURE 1 或使用命令行选项 GTest 将出现段错误 我正在考虑这个例子 https code google c
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 为什么 gcc 抱怨“错误:模板参数 '0' 的类型 'intT' 取决于模板参数”?

    我的编译器是gcc 4 9 0 以下代码无法编译 template
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐

  • Wordpress - 在类别存档中使用 wp_query - 如何显示适当的类别?

    我在类别存档中使用 wp query 以便可以使用 meta query 忽略具有某些元值的帖子 问题是 由于我使用的是wp query 它似乎忽略了当前正在查看的类别并显示所有类别 有没有办法检索用户正在查看的类别 可能由 url 定义
  • 使用 Javascript 访问通过 Twig 传递的变量

    我有一个控制器 它将数组传递给树枝模板 我想在该页面上编写的脚本中使用该模板 我该怎么做呢 我在我的 twig 模板中尝试过 但只有当它是一个字符串时才有效 你可能必须json encode数组 试试这个
  • 根据会话状态更改变量内容时出错

    我正在尝试编写一个脚本 根据会话状态和页面 URL 中的 ID 例如 www example com profile php id 1 更改可验证内容 以便它显示一组如果他们未登录并查看其他人的个人资料 则为另一内容 如果已登录并在自己的个
  • OCR 中的草书字符分割

    我做了一个OCR application for handwritten normal characters 对于我所使用的字符分割histogram profile method 这成功地适用于普通的英文字符 我使用水平投影进行线分割 使
  • 创建具有来自单独表行的列特征的数据框

    我有一个描述性的辅助表 其行指定变量的特征 其中varCat描述变量类别 rept稍后实施该类别的重复次数 以及form他们的数据格式 require dplyr require tidyr require purrr descr lt t
  • 如何通过 JavaScript 在 Calendly 中预填“电话号码”? “位置”字段不起作用

    我在 Calendly 中有一个 电话呼叫 一对一 事件类型 我想为其提供自定义的嵌入脚本 根据文档我发现location参数 字段可用于通过 URL 预填充电话号码 但它不适用于这种嵌入代码 它不会预填充内联小部件 其他所有内容都会进入并
  • 顶部和底部带有双箭头的 Div

    我不是 CSS 专家 我会很努力地为我的 div 实现以下形状 然后我想在中间插入文本 我怎样才能获得这个形状 下面是我的一些尝试 div class triangle down white style height 400px try d
  • 使用 javascript 从 sharepoint 人员选择器检索电子邮件地址

    我正在使用 SharePoint 2007 我在布局文件夹中有一个自定义 aspx 页面 其中包含人员选择器 PeopleEditor 控制 用户可以输入n控制中的用户数量 我想使用 JavaScript 从人员选择器控件中检索用户的电子邮
  • Hibernate TransientPropertyValueException 保存数据时

    我正在尝试使用 hibernate 将数据插入数据库 这是我执行该操作的方式 session beginTransaction pojo StuDetails stu new StuDetails stu setFName f name s
  • 本地 HTML 文件无法正确加载到 Dash 应用程序中

    我尝试将本地 html 文件嵌入到基本的 Dash 应用程序中 我使用了这个代码link并将路径替换为我的本地相对路径 破折号应用程序与 html 本地页面位于同一文件夹中 html Iframe src random example ht
  • 在 Python 中对请求应用重试

    我有一个 URL 列表 我想使用 Python 对其执行 HTTP Get 请求grequests module 某些 URL 不会返回 正常 状态 在这种情况下 我想重试该 URL 我可以使用一个队列来做到这一点 该队列存储所有尚未尝试过
  • awk:一个文本文件中的词频,如何输出到myFile.txt?

    给定一个 txt 文件用空格分隔的单词 例如 But where is Esope the holly Bastard But where is And awk 函数 cat pathway to your file txt tr n so
  • 使用 PHP 替换文本文件中的字符串

    我需要打开一个文本文件并替换一个字符串 我需要这个 Old String span style display block New String span style display none 这是我到目前为止所拥有的 但除了额外的空格之外
  • 带有过滤器显示的 jQuery Mobile 列表视图,单击时显示项目

    我有一个使用 jqueryMobile 使用数据过滤器显示功能创建的列表视图 此功能会隐藏列表元素并在您键入时显示与输入的字符匹配的元素 我的数据源是本地的 意味着列表是静态填充的 我想做的是显示所有项目 而无需输入任何字符 但当列表本身获
  • 如何向我的 OSX 应用程序添加 Root 权限?

    我以 root 用户身份创建了一个应用程序 它运行良好 在 root 用户中 当我与标准用户尝试相同的应用程序时 它没有成功 然后我知道我需要 root 权限才能运行该应用程序 我谷歌了几天但没有得到它 我读过一些问题和苹果文档 哪个是 h
  • 压缩存储库中的所有父级?

    我删除了最后一个问题 因为我想我会问一个更简单的问题 有没有办法压缩节点的所有父节点 基本上 假装存储库从这里开始 So turn o o o o o x o o o o into x 如果我能修改x就更好了 但乞丐不能挑剔 以下是我将如何
  • div 内的浮动元素,浮动在 div 之外。为什么?

    假设你有一个div 给它一个确定的width并在其中放入元素 在我的例子中是img和另一个div 这个想法是容器的内容div会导致容器div伸展并成为内容的背景 但是当我这样做时 包含div缩小以适应非浮动物体 浮动物体要么完全向外 要么一
  • OSGi 解决什么问题?

    我在维基百科和其他网站上读到过OSGi 但我并没有真正看到大局 它说它是一个基于组件的平台 并且您可以在运行时重新加载模块 另外 到处给出的 实际示例 是 Eclipse Plugin Framework 我的问题是 OSGi 清晰简单的定
  • 将shared_ptr分配给weak_ptr

    我想将构造的shared ptr分配给weak ptr std weak ptr
  • 如何在“sub”表达式中使用lambda表达式参数?

    我希望能够构建类似以下委托的表达式 Func