Информация об изменениях

Сообщение Re[3]: Сравнение строк в C# от 05.09.2022 22:01

Изменено 05.09.2022 22:08 VladD2

Re[3]: Сравнение строк в C#
Здравствуйте, Went, Вы писали:

НС>>https://github.com/dotnet/coreclr/blob/master/src/System.Private.CoreLib/shared/System/String.Comparison.cs

W>Огромное спасибо, то что надо!

Только там тебе смотреть не чего. Точнее разве что вот на это:
        public static int Compare(string? strA, string? strB, CultureInfo? culture, CompareOptions options)
        {
            CultureInfo compareCulture = culture ?? CultureInfo.CurrentCulture;
            return compareCulture.CompareInfo.Compare(strA, strB, options);
        }


Так что тебе нужно на CompareInfo смотреть, если хочешь именно в соответствии с правилами для культур сравнивать.

Тут скорее вопрос, а зачем тебе это надо? Может проще позвать дотнетную функцию из неуправляемого приложения?
Re[3]: Сравнение строк в C#
Здравствуйте, Went, Вы писали:

НС>>https://github.com/dotnet/coreclr/blob/master/src/System.Private.CoreLib/shared/System/String.Comparison.cs

W>Огромное спасибо, то что надо!

Только там тебе смотреть не чего. Точнее разве что вот на это:
        public static int Compare(string? strA, string? strB, CultureInfo? culture, CompareOptions options)
        {
            CultureInfo compareCulture = culture ?? CultureInfo.CurrentCulture;
            return compareCulture.CompareInfo.Compare(strA, strB, options);
        }


Так что тебе нужно на CompareInfo смотреть, если хочешь именно в соответствии с правилами для культур сравнивать. А там дальше по коду:
        // Compare a string using the native API calls -- COMNlsInfo::InternalCompareString
        [System.Security.SecurityCritical]  // auto-generated
        [ResourceExposure(ResourceScope.Process)]
        [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
        [SuppressUnmanagedCodeSecurity]
        private static extern int InternalCompareString(IntPtr handle, IntPtr handleOrigin, String localeName, String string1, int offset1, int length1,
                                                                              String string2, int offset2, int length2, int flags);

Т.е. всё уходит в нэйтив.

Тут скорее вопрос, а зачем тебе это надо? Может проще позвать дотнетную функцию из неуправляемого приложения?