- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我的 ASP MVC 3 站点上的验证 .cs
文件中,我试图对数据库运行快速检查以了解用户输入的代理 ID 号是否存在。但是, ReSharper 正在识别 agentId
变量下的错误,该变量显示为 Access to modified closure
。我不确定这个错误是什么意思,或者这个声明有什么问题。
这是我们写入验证程序的辅助方法。它不是在循环中设置的,而是在五个位置之一检测到代理 ID 时从上方调用。
这里是调用StatValidation
if (String.IsNullOrEmpty(agt.AgencyId1))
{
_sb.Append("One Agency Id is required; ");
}
else
{
StatValidation(agt.AgencyCompany1,
agt.AgencyId1.Trim(), agt.AgencyIdType1, 1);
}
//Conditionally validate remaining Agent IDs
if (!String.IsNullOrWhiteSpace(agt.AgencyId2) ||
!String.IsNullOrWhiteSpace(agt.AgencyCompany2))
{
StatValidation(agt.AgencyCompany2, agt.AgencyId2, agt.AgencyIdType1, 2);
}
这是给出错误的方法头和代码行
private static void StatValidation(string company,
string agentId, string idType, int i)
{
AgentResources db = new AgentResources();
// ReSharper is highlighting 'agentId' with the error
// 'Access to modified closure'
var check = db.SNumberToAgentId.Where(x => x.AgentId.Equals(agentId));
if (check == null) _sb.Append("Agent ID not found; ");
最佳答案
Access to modified closure
消息意味着您的表达式正在捕获一个变量,该变量在捕获后确实/可能会更改其值。考虑以下内容
var myList = new List<Action>();
for(var i = 0; i < 5; ++i)
{
myList.Add(() => Console.WriteLine(i));
}
foreach(var action in myList)
{
action();
}
这将打印数字 5
5 次,因为 i
是由表达式捕获的,而不是 i
的值。由于 i
的值在循环的每次迭代中都会发生变化,因此每次 i
执行时,每个操作将打印的值都会发生变化,最终落在 5
因为它是循环的边界条件。
至于您给出的具体示例,因为 Where
是延迟计算的(而且,它永远不会为 null,它只是一个无法移动到下一条记录的可枚举对象第一次尝试),如果您要通过在 if
语句之后再次枚举来评估 check
,agentId< 的当前值
在迭代时将被评估,不一定是参数的原始值。
要解决此问题,请更改:
var check = db.SNumberToAgentId.Where(x => x.AgentId.Equals(agentId));
为此:
var check = db.SNumberToAgentId.Where(x => x.AgentId.Equals(agentId)).ToList();
这会强制 Where
迭代器只被评估一次,如果 agentId
稍后在方法中更改,该更改不会影响 check
的值。
此外,更改:
if (check == null) _sb.Append("Agent ID not found; ");
为此:
if (check.Count == 0) _sb.Append("Agent ID not found; ");
使您的支票有效
关于c# - ReSharper/Linq 错误 : Access to modified closure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17029840/
我刚刚开始使用 Google Closure 做一些工作,我想将选择字段的创建移动到它自己的模板中,并使用类似以下内容调用该模板: {call templates.utils.select} {p
我有一些代码,简化后看起来像: fn foo() -> Vec { unsafe { unsafe_iterator().map(|n| wrap_element(n)).co
我正在从脚本内部调用Closure Compiler(closurecompiler.jar)。该脚本还生成Closure Compiler需要编译的一些javascript。有没有办法将此JavaS
以下示例代码生成有关高级优化的编译器警告:“JSC_UNSAFE_NAMESPACE:为命名空间 NS 创建的别名不完整”。如果我删除@enum 注释,它不会发出警告。 var NS = {}; /*
看代码: let add_one = |&: x| { 1 + x }; 我知道x是闭包参数,但是闭包中的&:是什么意思? 最佳答案 这是 Rust 的一个文档不足的部分(并且过时,请参阅评论)。我知
PHP manual for anonymous functions (即闭包)指出: Anonymous functions are currently implemented using the
我从脚本内部调用 Closure Compiler (closurecompiler.jar)。该脚本还生成了一些 Closure Compiler 需要编译的 javascript。有没有办法将这个
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
当鼠标在文档正文中移动时,我试图调用一个函数。但是,下面的事件处理程序不起作用。 goog.events.listen(document, 'onmousemove', function(e)
我试过了 java -jar compiler.jar --js jj.js --js_output_file jj.js 输出文件大小为 0。 如果我不想从 .min.js 重命名为 .js,我该怎
Google Closure UI库如何与Google DART一起使用? 最佳答案 Dart没有使用JavaScript库的功能。这是设计使然,因为Dart旨在同时针对Dart VM和转换为JS的D
是否可以使用 Google Closure 编译器在两个文件中定义一个类?例如,如果我自动生成一个类并希望为用户输入的代码保留另一个类: 在 MyClass.AutoGenerated.js 中 go
当我在 http://closure-compiler.appspot.com 处的闭包编译器中测试以下代码时: // ==ClosureCompiler== // @output_file_name
是否可以使用 Google Closure 编译器在两个文件中定义一个类?例如,如果我自动生成一个类并希望为用户输入的代码保留另一个类: 在 MyClass.AutoGenerated.js 中 go
当我运行闭包编译器时,会收到一堆这样的警告: [exec] jquery/3.2.1/dist/jquery.js:733: WARNING - Suspicious code. The resul
假设您正在一个具有多个外部库依赖项的 javascript 项目中工作,并且想要在 ADVANCED_OPTIMIZATIONS 模式下使用 Google Closure Compiler 编译您的源
我正在为 PIXI.js 库准备 externs。我收到以下警告: js/Test.js:188: WARNING - Property position never defined on PIXI.
我最近使用 Google 的 Closure 编译器创建了一个 JavaScript 库:https://github.com/bvaughn/task-runner 我打算让这个库供那些也需要完整闭
我正在尝试自学闭包模板。我做了一个简单的文件 simple.soy: {namespace examples.simple} /** * says hello to the world * @pa
我正在将一个项目从 jQuery 迁移到 Closure。我有一些我想编译的只迁移了一半的代码。未编译的源工作正常。我想知道使用 SIMPLE_OPTIMIZATIONS 编译它的编译命令。 原始基于
我是一名优秀的程序员,十分优秀!