什么时候`foreach`停止了弦乐?

Tim*_*ong 8 c# .net-micro-framework c#-6.0 visual-studio-2015

我有许多针对.NET Micro Framework 4.3.2的项目.我在Visual Studio 2013中开发了它们.我刚刚升级到Visual Studio 2015,现在我遇到了用于编译和运行的相同代码的奇怪问题.

具体来说,我已经开始收到此错误:

CS1579 foreach语句不能对'string'类型的变量进行操作,因为'string'不包含'GetEnumerator'的公共定义

而且公平地说,它似乎没有.但是当我开发代码时,这很有效.它被编译,推送到NuGet并在其他几个项目中工作,因此它必须有效.

那么,为什么这停止在Visual Studio 2015中工作?我有很多项目使用这个成语迭代字符串中的字符,我希望我不必更改它们... :(

Tim*_*ong 1

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

补丁已合并,问题现已解决。