В .NET для Windows Store Apps – кажется, – вы больше не можете использовать строки в качестве Enumerables. Следующий код работает для настольных приложений, но не для приложений:
public static bool SolelyConsistsOfLetters(string s)
{
return s.All(c => char.IsLetter(c));
}
Ошибка
'string' не содержит определения для 'All' и не используется метод расширения 'All', принимающий первый аргумент типа 'string' (вам не хватает директивы using или ссылки на сборку?)
Но мне не хватает ссылки на сборку или using System.Linq;
. Следующий код работает:
public static IEnumerable<char> StringAsEnumerable(string s)
{
foreach (char c in s)
{
yield return c;
}
}
public static bool SolelyConsistsOfLetters(string s)
{
return StringAsEnumerable(s).All(c => char.IsLetter(c));
}
Проблема заключается в том, что s as IEnumerable<char>
не работает (ошибка: "Невозможно преобразовать тип" строка "в" System.Collections.Generic.IEnumerable "(..)" ) и s.GetEnumerator()
недоступно.
Мои вопросы:
- Неужели нет элегантного способа использования строк в качестве Enumerables (без вспомогательного метода, как указано выше)? Я чувствую, что я должен упустить что-то совершенно очевидное.
- Так как строка не ведет себя как Enumerable, почему/как здесь работает foreach?