“foreach” 在字符串上停止工作是什么时候?

8
我有一些针对.NET Micro Framework 4.3.2的项目,这些项目是在Visual Studio 2013中开发的。我刚刚升级到了Visual Studio 2015,现在遇到了一些奇怪的问题,这些问题都出现在之前能够编译和运行的代码中。
具体来说,我开始收到以下错误提示:
CS1579 foreach语句无法操作字符串类型的变量,因为字符串不包含公共定义“GetEnumerator”
实际上,它似乎确实没有这个功能。但当我开发这个代码时,这个方法是可以使用的。它已经被编译、推送到NuGet并在其他几个项目中工作,所以它必须已经被验证过。
那么,为什么在Visual Studio 2015中这个方法就失效了呢?我有很多项目都使用这种方法来遍历字符串中的字符,希望我不需要改变所有项目的代码... :(

3
使用新的编译器进行常规.NET或.NET for Windows Store应用程序项目似乎无法重现。毕竟可能是Micro Framework的问题。 - BoltClock
在我的VS 2015中,使用.NET Framework 4、4.5和4.6都能正常工作。这一定是微型框架的问题。 - Chris Knight
@BoltClock... 但是NetMF没有改变,只有Visual Studio改变了。我也在Netduino论坛上提出了这个问题,看看他们是否知道任何相关信息。 - Tim Long
我建议也将其放在Connect上。String类和GetEnumerator的内容都得到了编译器的特殊处理,这似乎与微框架结合使用时存在问题。 - H H
如果您正在使用C#6编译器,您可能还想尝试在此处发布:https://github.com/dotnet/roslyn/issues。 - jessehouwing
显示剩余8条评论
1个回答

1
在Roslyn之前,C#编译器对字符串有特殊处理,因此不需要实现IEnumerable。NetMF实现的字符串因此没有实现IEnumerable,而先于Roslyn的编译器对此很满意。显然,Roslyn缺乏对字符串的这种特殊处理,因此破坏了向后兼容性。这是Roslyn编译器中的一个重大变化。该问题已迁移到GitHub: github.com/dotnet/roslyn/issues/11387
一个补丁已合并,该问题现已关闭。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接