【问题标题】:When did `foreach` stop working on strings?`foreach` 何时停止处理字符串?
【发布时间】:2015-09-10 17:10:21
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 似乎无法使用新编译器和所有内容在常规​​ .NET 或 .NET for Windows Store 应用程序项目中重现。毕竟可能是一个微框架问题。
  • 它确实有效:rextester.com/BQUY75614 所以,这可能是 c#6 的变化
  • 在 VS 2015 中使用 .NET Framework 4、4.5 和 4.6 对我来说效果很好。这一定是一个微框架问题。
  • 您确定要在两个 Visual Studio 中使用相同的 Fx 版本 4.3.2?
  • @HenkHolterman 是肯定的。我正在使用 Netduino.IP,并且只有一个版本可用。它适用于 VS2013,但不适用于 2015。

标签: c# visual-studio-2015 .net-micro-framework c#-6.0


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-04-21
    • 2012-05-17
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多