gpt4 book ai didi

c# - ReSharper/Linq 错误 : Access to modified closure

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:33 25 4
gpt4 key购买 nike

在我的 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 语句之后再次枚举来评估 checkagentId< 的当前 在迭代时将被评估,不一定是参数的原始值。

要解决此问题,请更改:

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/

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