using System.Collections.Generic;
public static void Main()
var listExample = new List<string>(){ "banana", "apple", "lemon", "orange",
"cherry", "pear", "яблоко", "лимон", "груша", "банан", "апельсин", "вишня" };
var result = listExample.OrderByCyrillicFirst();
foreach(var item in result)
var resultDescending = listExample.OrderByCyrillicFirstDescending();
foreach(var item in resultDescending)
public static class MyExtensions
public static IEnumerable<string> OrderByCyrillicFirst(this IEnumerable<string> list)
var cyrillicOrderedList = list.Where(l => string.IsNullOrEmpty(l) ? false : IsCyrillic(l[0])).OrderBy(l => l);
var latinOrderedList = list.Where(l => string.IsNullOrEmpty(l) ? true : !IsCyrillic(l[0])).OrderBy(l => l);
return cyrillicOrderedList.Concat(latinOrderedList);
public static IEnumerable<string> OrderByCyrillicFirstDescending(this IEnumerable<string> list)
var cyrillicOrderedList = list.Where(l => string.IsNullOrEmpty(l) ? false : IsCyrillic(l[0])).OrderByDescending(l => l);
var latinOrderedList = list.Where(l => string.IsNullOrEmpty(l) ? true : !IsCyrillic(l[0])).OrderByDescending(l => l);
return cyrillicOrderedList.Concat(latinOrderedList);
private static bool IsCyrillic(char ch)
return ch >= 1024 && ch <= 1273;