`foreach` 什么时候停止处理字符串?

When did `foreach` stop working on strings?

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

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

CS1579 foreach statement cannot operate on variables of type 'string' because 'string' does not contain a public definition for 'GetEnumerator'

而且很公平,它似乎没有。 但这在我开发代码时有效。它被编译,推送到 NuGet 并在其他几个项目中工作,所以它一定有效。

那么,为什么这在 Visual Studio 2015 年停止工作了?我有很多项目使用这个习惯用法来遍历字符串中的字符,我希望我不必全部更改它们...:(

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

补丁已合并,问题现已关闭。