【发布时间】:2012-08-20 05:21:41
【问题描述】:
在https://stackoverflow.com/a/8649429/1497 Eric Lippert 的这个答案中,关于 foreach 循环如何使用该变量,“仅供参考,我们很可能会在下一个 C# 版本中解决此问题;这是开发人员的主要痛点”。
在下一个版本中,每次运行“foreach”循环时,我们都会生成一个新的循环变量,而不是每次都关闭同一个变量。这是一个“重大”更改,但在绝大多数情况下,“中断”将修复而不是导致错误。
我还没有找到任何表明此更改已完成的信息。是否有任何迹象表明这就是 foreach 循环在 C# 5 中的工作方式?
【问题讨论】:
-
所引用的
foreach是 C# 语言功能,而不是 .NET Framework 功能。 -
感谢@BoltClock。我已将问题更新为针对 C# 5。不过,为了澄清起见,如果我在 VS 2012 中针对 .Net 4.5 构建 C# 项目,我是否可能使用 C# 5?
-
@a_hardin:除非您要求它使用不同的编译器,否则无论目标框架如何,您都将对 VS2012 中的任何项目使用 C#5.0。要将编译器更改为特定版本,请转到项目属性,构建选项卡,然后单击右下角的高级...。然后更改“语言版本”下拉菜单。
-
@JeffYates 我尝试在 VS2012 中更改语言版本,但它始终遵循“新”约定(即
foreach变量是“内部”变量,并且捕获了不同的“副本”在每次迭代中)。您是否真的验证过更改语言版本对您有效? (这主要是理论上的兴趣;我认为没有人会希望在实践中使用 C# 4 行为)。 -
@JeppeStigNielsen:很有趣。我没试过。也许它只会尊重语法差异而不是规范更改。这很令人惊讶。有机会我一定要看看。你是如何验证的? IL 或应用行为?
标签: c# foreach .net-4.5 c#-5.0