在这里看到了几个类似的问题,但没有一个似乎完全是我的问题...访问修改后的封闭......但为什么?
我理解(或认为我理解)闭包的概念,并理解什么会导致Resharper抱怨访问修改后的闭包,但在下面的代码中,我不明白我是如何违反闭包的。
因为primaryApps
是在for循环的上下文中声明的,所以在处理primaryApps
时primary
不会改变。如果我已经在for循环之外声明了primaryApps
,那么绝对,我有闭包问题。但为什么在下面的代码?
var primaries = (from row in openRequestsDataSet.AppPrimaries
select row.User).Distinct();
foreach (string primary in primaries) {
// Complains because 'primary' is accessing a modified closure
var primaryApps = openRequestsDataSet.AppPrimaries.Select(x => x.User == primary);
是ReSharper的只是没有足够的智慧弄清楚它是不是一个问题,或者是有封闭一个原因是一个问题,在这里,我没有看到?
您确定要使用'选择'而不是'Where'吗? – diceguyd30 2010-10-22 17:39:32
Select返回一个有类型数据行的数组...其中返回它们的IEnumerable。任何一个人都会为我正在做的事情工作;我读过的文章说。在我使用的条件下,选择更快。也许是这样,也许不是很难说。 – 2010-10-22 19:10:38
我拿回来...因为我有一个lambda,我没有使用内置的datatable.select(),所以我没有得到一个类型的行数组。在这种情况下,你是对的,我没有改变价值观,所以一个地方更有意义。 – 2010-10-22 19:27:59