Выборка/Фильтр слов из массива 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));
→ Ссылка