MemberExpression:InvalidOperationExpression 变量“x”从范围“”引用,但未定义

2023-11-21

我在用着System.Linq.Expressions

我试图建立一个简单的Lambda表达式其中包括一个会员表达。如果我使用 System.Linq.Expressions API 显式创建 MemberExpression(例如建立会员访问权限),当我在 LambdaExpression 上调用 Compile() 时,我会收到错误“InvalidOperationExpression 变量 'x' 从作用域 '' 引用,但未定义”。

例如,这是我的代码

Expression<Func<Customer, string>> expression1, expression2, expression3;
Func<Customer, string> fn;
expression1 = (x) => x.Title;
fn = expression1.Compile();//works
fn(c);
MemberExpression m;
m = Expression.MakeMemberAccess(
Expression.Parameter(typeof(Customer), "x"), typeof(Customer).GetProperty("Title"));
expression2 = Expression.Lambda<Func<Customer, string>>(m,
    Expression.Parameter(typeof(Customer), "x"));

m = Expression.Property(Expression.Parameter(typeof(Customer),"x"), "Title");
expression3 = Expression.Lambda<Func<Customer, string>>(m,
    Expression.Parameter(typeof(Customer), "x"));

fn = expression3.Compile();//InvalidOperationExpression variable 'x' referenced from scope '', but it is not defined
fn = expression2.Compile();//InvalidOperationExpression variable 'x' referenced from scope '', but it is not defined

调用 Compile() 方法时,表达式 2 和表达式 3 会抛出异常,但表达式 1 不会;表达式1有效。为什么是这样?如何创建像表达式 2、3 中那样的 MemberExpression,并在调用 Compile() 时让它们工作(不抛出异常)?

Thanks


你正在创造不同的多次调用“x”的参数。如果您使用单个ParameterExpression,应该一切正常。

ParameterExpression p = Expression.Parameter(typeof(Customer), "x");
MemberExpression m = Expression.MakeMemberAccess(p, 
    typeof(Customer).GetProperty("Title"));
expression2 = Expression.Lambda<Func<Customer, string>>(m, p);

m = Expression.Property(p, "Title");
expression3 = Expression.Lambda<Func<Customer, string>>(m, p);

fn = expression3.Compile();
fn = expression2.Compile();

基本上,参数表达式与名称不匹配 - 您必须在各处使用相同的表达式。虽然有点痛,但是我们就这样吧……

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MemberExpression:InvalidOperationExpression 变量“x”从范围“”引用,但未定义 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 如何使用算法来填充向量的向量

    I have typedef std vector
  • AngularJS $http:如何避免重定向跟随

    在 AngularJS 应用程序中 我对服务器 URL 进行 http post 调用 这个url的成功响应是30x重定向 我的问题是 http post严格遵循这个重定向并在成功回调中返回最终调用的结果 我想拦截此重定向并手动将用户重定向
  • 返回页面中所有 iframe 的 ID

    由于我正在使用的小部件格式 我有一个页面 其中嵌入了多个 iframe 我不会粘贴代码 因为它庞大且笨拙 但它本质上就是这样
  • Android Gradle 应用程序:connectedCheck 从依赖项运行测试

    我有一些有自己的测试的图书馆项目 我不负责这个库项目 也不关心它的测试 但是 当我运行时gradle app connectedCheck它运行我的测试 但它也运行依赖项的测试 有什么办法可以防止这种情况发生吗 我应该提到我的依赖项不在ap
  • decimal.InvalidOperation,除法对于非常大的数字来说是不可能的

    使用Python 3 5 2 gt gt gt from decimal import Decimal gt gt gt Decimal 12 Decimal 0 01 Decimal 0 00 gt gt gt Decimal 23456
  • Linq 相当于 SQL LEFT 函数?

    我们有一个数据库 其中一些字段为 varchar max 可能包含大量文本 但是我遇到的情况是 我只想从字段中选择前 300 个字符 以用于 MVC 网站上的分页结果表进行该领域的 预览 对于一个简化的示例查询 我想在表中显示所有位置 这将
  • 按连续序列对整数进行分组列表

    我有一个整数列表 1 2 3 4 5 8 9 10 11 200 201 202 我想将它们分组到一个列表列表中 其中每个子列表都包含顺序未被破坏的整数 像这样 1 5 8 11 200 202 我有一个相当笨拙的工作 lSequenceO
  • 在淘汰赛中重新应用绑定

    我基本上想在同一页面上为不同的对象重新应用绑定 但有奇怪的行为 重新应用绑定后 项目列表丢失 请看这里 http jsfiddle net baio 9UcUs 5 该怎么办 简短的回答是不支持 长的答案是有一些方法可以解决这个问题 一种方
  • 使用反射解压数组

    我正在尝试解压从反映对象字段获得的数组 我将常规字段的值设置为一个对象 如果它是一个数组 那么我想将我的通用对象转换为数组 无论其类型是什么 并提取其内容 fields i setAccessible true String key fie
  • 如何直接从IDE读取Python源代码

    我目前正在学习Python 我想通过阅读它的源代码来更深入地了解Python是如何工作的 我可以手动进入Python安装目录查看源代码 我想知道是否可以直接从PyCharm等IDE读取Python源代码 我尝试过了control click
  • 如果没有互联网连接,xmlns属性如何工作并被浏览器理解?

    一个简单的 XHTML 文档 具有最少的所需标签 以及xmlns属性有一个 http 链接 如果我在 localhost 上工作并且没有 Internet 连接 我不能在 XHTML 上工作吗 The content of the docu
  • 导入语句错误“需要“FILENAME”或

    我在将 Appirater 集成到我的应用程序中时遇到一些问题 我已经正确添加了所有必要的文件 并且拥有正确的代码 我认为 但是在尝试将其实现到我的 AppDelegate m 文件中时出现错误 当我做 import Appirater h
  • 使用 MockMvc 在 Spring MVC 中进行单元测试/登录

    我有一个使用 Spring MVC 创建的非常简单的 REST 应用程序 代码可在GitHub 它有一个简单的WebSecurityConfigurer如下 Override protected void configure HttpSec
  • 是否可以使用android的语音识别而不显示对话框?

    我想在 android 中使用语音发送文本 api 但我不想被这些对话框拖慢速度 没有它们是否可以使用该功能 对的 这是可能的 您可以使用 API 中的 SpeechRecognizer 类 确保它在主线程中使用 根据 API 的要求 并且
  • 将 MSTest、xUnit 或 NUnit 与 dotnet core 结合使用

    TLDR 跳转到答案以获取有关工作 xUnit 或 MSTest 设置的详细信息 xUnit 是最不痛苦的选择 我无法让 NUnit 在我的构建服务器上工作 因此我尝试了 xUnit 和 MSTest 两者都对我不起作用 MSTest 我只
  • 错误边界禁用交换机内部的路由

    For 很长时间在遇到错误边界后 我一直试图让路由在我们的应用程序中工作 但直到今天我才发现看似与周围许多示例相同的代码有一个重要的区别 路由被包裹在Switch 如果启用的话 这个简单的更改足以阻止路由工作 Demo 采取以下片段 如果我
  • 是否可以从 npm 中下载的 .zip 文件从 git 存储库安装包?

    我已经通过手动下载了存储库的主分支Download ZIPGitHub 上的按钮 现在 我的问题是 是否可以从下载的 git 存储库安装包 npm 中的 zip 文件 Running npm install Pobrane lwip mas
  • 通过子网掩码计算IP范围

    如果我有一个子网掩码 例如255 255 255 0和一个IP地址192 168 1 5 有没有一种简单的方法可以确定该子网内所有可能的IP地址 在这种情况下 192 168 1 1 192 168 1 2 192 168 1 3 192
  • 关于使用 Python xarray 将经度数组从 0 - 360 更改为 -180 到 180

    我是一名 matlab 用户 最近尝试更多地使用 Python 进行计算 我正在使用 xarray 并希望将地球物理场的经度数组从 0 360 更改为 180 到 180 但是当我这样做时 df xr open dataset ecmwf
  • MemberExpression:InvalidOperationExpression 变量“x”从范围“”引用,但未定义

    我在用着System Linq Expressions 我试图建立一个简单的Lambda表达式其中包括一个会员表达 如果我使用 System Linq Expressions API 显式创建 MemberExpression 例如建立会员