使用c#'s 内部的lambda表达式或匿名方法可以创建“访问修改后的闭合”错误。 编译器对循环变量的处理是此问题的关键因素。
foreach
>可变范围
的问题
foreach
>与大多数语言不同,C#声明
循环的身体。这意味着整个循环仅存在一个变量实例。 每次迭代都会更新此单个变量,从而导致封闭中使用时出乎意料的行为。 然后关闭,然后捕获变量的
。
foreach
循环变量限制
>另一个限制是,
> >为什么?
>
foreach
初始C#规范对
循环)的决定。 但是,事实证明这是有问题的,与预期行为相矛盾并引起错误。 c#5的解决方案
foreach
>识别此设计缺陷,Microsoft在C#5中解决了它。在C#5和以后,现在for
loop变量在
>在中。这样可以确保闭合捕获每个循环周期的变量的新实例,从而解决“访问修改后的封闭”问题,并将C#与常见的编程实践对齐。
以上是为什么C#'s' foreach”循环变量可重用导致闭合陷阱?的详细内容。更多信息请关注PHP中文网其他相关文章!