Когато гледах видеото за стринговете за мен възникна следния въпрос: Как "Ivan" ще е след "ivan" лексикографски или 
по-общо как главните букви са след малките като знаем, че е точно обратното в Unicode таблицата ? Ясно беше, че метода 
string.Compare(str1,str2,false); използва друга подредба на символите различна от тази в Unicode. И исках да попитам 
във форума как изглежда тази подредба, но докато си обмислях въпроса се сетих за възможни начини да си отговоря :)
Ето какво открих: 
1. Когато използваме булева константа като параметър (true/false) настройваме метода да работи с подредба 
на символите, която зависи от настоящата култура. Аз не открих разлика между различните култури и за bg-BG и за zh-CN(Китай)
една и съща подредба (взел съм символите от 0 до z в Unicode подредени според настоящата култура):
: ; ? @ [ \ ] ^ _ ` < = > 0 1 2 3 4 5 6 7 8 9 a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z
2. Когато дадем трети параметър да бъде някоя стойност от енумерацията System.StringComparison тогава може точно да изберем коя 
подредба ще се използва при сравнението. Ето стойностите и значенито им:
CurrentCulture - Изпозва подредбата зависеща от настоящата култура.
CurrentCultureIgnoreCase - Изпозва подредбата зависеща от настоящата култура и не прави разлика между малки и големи букви.
InvariantCulture - Изпозва подредбата зависеща от настоящата култура.
InvariantCultureIgnoreCase - Изпозва подредбата зависеща от настоящата култура и не прави разлика между малки и големи букви.
Ordinal - Изпозва подредбата на Unicode таблицата.
OrdinalIgnoreCase - Изпозва подредбата на Unicode таблицата и не прави разлика между малки и големи букви.
Само не открих каква е разликата между CurrentCulture и InvariantCulture ?
Би ми било полезно някои да коментира тези расъждения. Прилагам и програмката която използвах за да открия подредбата зависеща от настоящата култура.

using System;

class Probi
{
    static void Main()
    {

        Console.WriteLine();
        var mas = new char[75];
        var mas2= new char[75];
        for (int i = 122,k=0; i >= 48; i--,k++)
        {
            mas[k] = (char)i;
        }
        Array.Copy(mas, mas2, mas.Length);
        PrintAr(mas);
        Array.Sort(mas);
        PrintAr(mas);
        PrintAr(mas2);
        System.Threading.Thread thread = System.Threading.Thread.CurrentThread;
        System.Globalization.CultureInfo originalCulture = thread.CurrentCulture;
        thread.CurrentCulture = new System.Globalization.CultureInfo("zh-CN");
        OSortCo(mas2);
        PrintAr(mas2);
        Console.WriteLine(System.Globalization.CultureInfo.CurrentCulture);
        thread.CurrentCulture = originalCulture;
    }

    static void OSortCo(char[] m)
    {
        char ch;
        for (int i = 0; i < m.Length-1; i++)
        {
            for (int j = i; j < m.Length - 1; j++)
            {
                if (string.Compare(m[i].ToString(), m[j + 1].ToString(), StringComparison.CurrentCulture) == 1)
                {
                    ch = m[j + 1];
                    m[j + 1] = m[i];
                    m[i] = ch;
                }

            }

        }
    }

    static void PrintAr(char[] m)
    {
        for (int i = 0; i < m.Length; i++)
        {
            Console.Write("{0} ", m[i]);
        }
        Console.WriteLine();
    }

}