static extern Int32 CompareStringEx
 (
     String localeName,
     CmpFlags flags,
     String str1,
     Int32 count1,
     String str2,
     Int32 count2,
     IntPtr versionInformation,
     IntPtr reserved,
     Int32 param
 );
        public LexicographicComparer(CultureInfo cultureInfo, CmpFlags flags = CmpFlags.Default)
        {
            // It is not recommended to use a neutral culture for comparing / sorting.
            // (http://msdn.microsoft.com/de-de/library/system.globalization.cultureinfo%28v=vs.110%29.aspx)
            // If a neutral culture is passed, we use InvariantCulture for sorting.
            if (cultureInfo.Equals(CultureInfo.InvariantCulture) || cultureInfo.IsNeutralCulture)
            {
                _locale = LOCALE_NAME_INVARIANT;
            }
            else
            {
                _locale = cultureInfo.Name;
            }

            _flags = flags;
        }