Выборка/Фильтр слов из массива LINQ
Имеется список строк:
List<string> Names = new List<string> {"Horn","Horrible","GuaRd","exampl","GreGOry"};
Мне нужно отфильтровать слова по таким критериям: Чтобы первая буква слова была заглавной, а все остальные маленькими. Т.Е мне нужно получить: Horn,Horrible.
Вот мои наброски, но так и не докопался как проверить последующие символы:
Names.Where(x => char.IsUpper(x[0]))
Пробовал делать так:
Names.Where(x => char.IsUpper(x[0])).All(word=>word.Skip(1).Where(x=>char.isLower(x)));
Но тоже не получилось.
Ответы (2 шт):
Автор решения: Regent
→ Ссылка
Метод All возвращает bool - для получения самих элементов вместо него можно воспользоваться Where, как и в других случаях:
Names.Where(word => char.IsUpper(word[0])).Where(word => word.Skip(1).All(char.IsLower))
А можно оба Where объединить в один:
Names.Where(word => char.IsUpper(word[0]) && word.Skip(1).All(char.IsLower))
Автор решения: Alexander Petrov
→ Ссылка
В дотнете есть специальный метод TextInfo.ToTitleCase.
var names = new List<string> { "Horn", "Horrible", "GuaRd", "exampl", "GreGOry" };
var textInfo = new CultureInfo("en-US").TextInfo;
var titleNames = names.Where(name => name == textInfo.ToTitleCase(name));
Console.WriteLine(string.Join(", ", titleNames));