相关疑难解决方法(0)

为什么在lambda表达式中使用迭代变量很糟糕

我只是写了一些快速代码并注意到这个编译器错误

在lambda表达式中使用迭代变量可能会产生意外结果.
相反,在循环中创建一个局部变量并为其分配迭代变量的值.

我知道这意味着什么,我可以很容易地解决它,而不是什么大不了的事.
但我想知道为什么在lambda中使用迭代变量是个坏主意?
我以后可能会遇到什么问题?

vb.net iteration lambda warnings

51
推荐指数
2
解决办法
1万
查看次数

在C#5中是否改变了foreach对变量的使用?

在这个答案中,https: //stackoverflow.com/a/8649429/1497 Eric Lippert说"我们很有可能在下一版本的C#中解决这个问题;对于开发人员而言,这是一个主要的痛点". foreach循环使用变量.

在下一个版本中,每次运行"foreach"循环时,我们将生成一个新的循环变量,而不是每次都关闭相同的变量.这是一个"突破"的变化,但在绝大多数情况下,"休息"将是修复而不是导致错误.

我无法找到任何表明此更改尚未完成的内容.有没有迹象表明这是foreach循环在C#5中的工作方式?

c# foreach c#-5.0 .net-4.5

37
推荐指数
1
解决办法
5590
查看次数

在foreach循环中构建的Linq查询始终从最后一次迭代中获取参数值

我有一个包含几个关键字的列表.我预先通过他们像这样构建我的linq查询(煮沸以消除代码噪音):

List<string> keys = FillKeys()
foreach (string key in keys){
    q = q.Where(c => c.Company.Name.Contains(key));
}
Run Code Online (Sandbox Code Playgroud)

当我现在让我的键包含2个键分别返回结果,但不能一起出现(q中的每个项目都是"xyz"或"123",从不"123"和"xyz"),我仍然得到结果.结果集与它到达的最后一个字符串相同.

我查看了linq查询,看起来它创建了正确的sql,但它用相同的(最后一个itterated)值替换了@ p1 AND @ p2.

我究竟做错了什么?

c# linq

17
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×2

.net-4.5 ×1

c#-5.0 ×1

foreach ×1

iteration ×1

lambda ×1

linq ×1

vb.net ×1

warnings ×1