Сравнение строк в C#
От: Went  
Дата: 01.09.22 06:04
Оценка:
Здравствуйте.
У меня есть задача сравнить строки на не-.NET языке в точности подобно тому, как это делается на .NET.
Например, функция String.Equals. Если у нас не Ordinal сравнение, то учитывается культура, а также, проводится нормализация перед сравнением. Правильно? Или неправильно? Влияет ли культура на результат сравнения? Если проводится нормализация, то по какой форме?
Re: Сравнение строк в C#
От: Nonmanual Worker  
Дата: 01.09.22 06:37
Оценка:
Здравствуйте, Went, Вы писали:

W>Здравствуйте.

W>У меня есть задача сравнить строки на не-.NET языке в точности подобно тому, как это делается на .NET.
W>Например, функция String.Equals. Если у нас не Ordinal сравнение, то учитывается культура, а также, проводится нормализация перед сравнением. Правильно? Или неправильно? Влияет ли культура на результат сравнения? Если проводится нормализация, то по какой форме?
Там целый зоопарк, не ординал сравнение зависит от региона, версии .Net, оперционки и возможно чего-то еще. В доках все указано.
Re[2]: Сравнение строк в C#
От: Shmj Ниоткуда  
Дата: 01.09.22 07:43
Оценка:
Здравствуйте, Nonmanual Worker, Вы писали:

NW>Там целый зоопарк, не ординал сравнение зависит от региона, версии .Net, оперционки и возможно чего-то еще. В доках все указано.


Т.е. смысл в нем — равен нулю.
Re: Сравнение строк в C#
От: Ночной Смотрящий Россия  
Дата: 01.09.22 08:08
Оценка: 6 (1)
Здравствуйте, Went, Вы писали:

W>Например, функция String.Equals. Если у нас не Ordinal сравнение, то учитывается культура, а также, проводится нормализация перед сравнением. Правильно? Или неправильно? Влияет ли культура на результат сравнения? Если проводится нормализация, то по какой форме?


https://github.com/dotnet/coreclr/blob/master/src/System.Private.CoreLib/shared/System/String.Comparison.cs
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Сравнение строк в C#
От: Went  
Дата: 01.09.22 08:34
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>https://github.com/dotnet/coreclr/blob/master/src/System.Private.CoreLib/shared/System/String.Comparison.cs
Огромное спасибо, то что надо!
Re[3]: Сравнение строк в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.22 22:01
Оценка: +1
Здравствуйте, 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);

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

Тут скорее вопрос, а зачем тебе это надо? Может проще позвать дотнетную функцию из неуправляемого приложения?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 05.09.2022 22:08 VladD2 . Предыдущая версия . Еще …
Отредактировано 05.09.2022 22:05 VladD2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.