Я пытаюсь вызвать метод расширения Linq для строки из строки из PCL, но я не могу скомпилировать проект. Вызов .Select()
на строку из отдельного, не переносимого проекта компилируется. Я вижу, что .Select()
занимает this IEnumerable<TSource> source
. Строковые (и String) типы реализуют IEnumerable
внутри сборки .NETPortable, поэтому почему .Select()
быть недоступен? Может ли компилятор не неявно преобразовывать строки в массивы символов с помощью PCL по какой-то причине?.NET Portable - вызов .Select() для строки
ответ
Компилятор должен неявно преобразовывать string
в IEnumerable<char>
.
Независимо от того, работает ли это, зависит от платформы (ов), на которую вы нацеливаетесь, с переносимой библиотекой и, следовательно, какое подмножество .NET Framework доступно. Если вы нацелились на .NET Framework 4 и, например, Xamarin, у вас есть другое подмножество, чем если бы вы ориентировались на .NET Framework 4.5.1 и Xamarin. В первом случае компилятор отклонит неявный листинг от string
до IEnumerable<char>
, тогда как в последнем случае он будет принят.
Таким образом, простое решение (если оно вам подходит) предназначалось для целевой платформы .NET Framework 4.5.1 и выше. В противном случае вы можете передать свою строку последовательности символов, например, используя .Cast<char>()
.
Или 'string.ToCharArray', если он доступен – TheLethalCoder
. Хорошая вещь об использовании Cast в этом случае заключается в том, что на платформах, где' string' реализует 'IEnumerable
Вы добавили 'using System.Linq;' в свою 'use' директиву? –
Возможно, не совсем повторяется, но актуально: http://stackoverflow.com/questions/11557690/why-doesnt-string-class-implement-ienumerablechar-in-portable-library – Abion47
IEnumerable и IEnumerable - это разные интерфейсы. –
Peter