2015-09-10 1 views
8

У меня есть ряд проектов, нацеленных на .NET Micro Framework 4.3.2. Я разработал их в Visual Studio 2013. Я только что обновился до Visual Studio 2015, и теперь у меня возникают странные проблемы с тем же кодом, который использовался для компиляции и запуска.Когда «foreach» перестает работать с строками?

В частности, я начал получать эту ошибку:

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

И вполне справедливо, это, кажется, не. Но это сработало, когда я разработал код. Он скомпилирован, перенаправлен в NuGet и работает в нескольких других проектах, поэтому он ДОЛЖЕН работать.

Итак, почему это перестало работать в Visual Studio 2015? У меня есть много проектов, которые используют эту идиому для итерации символов в строке, я надеюсь, что мне не придется их менять ... :(

+3

Can Кажется, что они воспроизводятся в обычном проекте приложений .NET или .NET для Windows Store с новым компилятором и всем остальным. Могло быть проблемой Micro Framework. – BoltClock

+0

Это, безусловно, работает: http://rextester.com/BQUY75614 So , это может быть изменение в C# 6 – Jamiec

+0

It wor ks отлично для меня в VS 2015 с .NET Framework 4, 4.5 и 4.6. Это, должно быть, проблема с микроструктурой. –

ответ

1

Я рассмотрел .net micro framework api от here , и я обнаружил, что класс String не имеет метода GetEnumerator, и, как вы знаете, этот метод необходим для работы цикла foreach. Я действительно не знаю, как вы скомпилировали код на визуальной студии 2013 года.

+1

У компилятора C# pre-Roslyn была специальная обработка строк, и реализация IEnumerable не требовалась. Это потрясающее изменение в компиляторе Roslyn. Проблема была перенесена в GitHub здесь: https://github.com/dotnet/roslyn/issues/11387 Вероятно, это должно быть исправлено в обоих местах, если вы вносите какую-либо ценность в закон Постела. –

 Смежные вопросы

  • Нет связанных вопросов^_^