我有许多针对 .NET Micro Framework 4.3.2 的项目。我在 Visual Studio 2013 中开发了它们。我刚刚升级到 Visual Studio 2015,现在我遇到了用于编译和运行的相同代码的奇怪问题。
具体来说,我开始收到此错误:
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
。因此,string 的 NetMF 实现没有实现 IEnumerable
,Roslyn 之前的编译器对此很满意。 Roslyn 显然缺乏对字符串的这种特殊处理,因此破坏了向后兼容性。这是 Roslyn 编译器的重大变化。该问题已迁移到 GitHub 此处:github.com/dotnet/roslyn/issues/11387
补丁已合并,问题现已关闭。
关于c# - `foreach` 什么时候停止处理字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32507919/