2014-01-11 2 views
0

У меня есть List<string>, который содержит некоторые элементы, имеющие небуквенные символы. Например, у меня может быть #232353;, который вообще не содержит буквы, или у меня может быть SomeText,SomeOtherText, и этот элемент содержит запятую, которая также не является буквой. Как удалить эти элементы с помощью linq? Что-то вроде этого:Сохраняйте только элементы списка, который имеет только буквы

MyList = MyList.Where(...) 

Спасибо.

+0

См. [Проверка того, что строка содержит только буквы в C#] (http://stackoverflow.com/questions/1181419/verifying-that-a-string-contains-only-letters-in-c-sharp) и [ Как удалить элементы из общего списка во время итерации ove r it?] (http://stackoverflow.com/questions/1582285/how-to-remove-elements-from-a-generic-list-while-iterating-over-it). Научитесь разбивать свои проблемы на более мелкие части, и вы увидите ответы на все вопросы. – CodeCaster

ответ

4

Поскольку это на List<string> вы можете использовать метод RemoveAll, чтобы удалить все значения, которые соответствуют заданному предикату

MyList.RemoveAll(s => s.Any(c => !Char.IsLetter(c))); 
+0

+1 хороший вариант. Также вы можете использовать метод списка «FindAll», но это создаст новый список результатов, так как мой ответ –

+0

. Каково значение слова «Так как это в списке »? – frenchie

+0

@frenchie означает, что удаление может быть выполнено на месте без необходимости создания новой коллекции. У типа «Список » есть методы «Добавить/Удалить», которые непосредственно изменяют коллекцию. С другой стороны, такие типы, как 'IEnumerable ', имеют методы расширения, которые удаляются, но создают новую коллекцию. Это означает, что в итоге вы получите синтаксис типа 'e = e.Where (x => ...)'. – JaredPar

9

Вы можете использовать Char.IsLetter, чтобы проверить, если все символы в строке буквы:

MyList = MyList.Where(s => s.All(Char.IsLetter)).ToList(); 
+1

Хорошо, но это говорит о том, что он не может преобразовать IEnumerable в список frenchie

+0

@frenchie Извините, пропустил эту вещь - просто добавьте 'ToList()' вызов для создания нового 'List ' из отфильтрованных строк –

+0

Какая разница позади вашего ответа и ответа Джареда? – frenchie

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