2014-10-21 4 views
0

Я пытаюсь получить связь между результатами сравнения строк при использовании StringComparer.OrdinalignoreCase и StringComparer.InvariantCultureIgnoreCase. Точнее, я хотел бы знать, какие из следующих четырех утверждений:Взаимосвязь между StringComparer.OrdinalignoreCase и StringComparer.InvariantCultureIgnoreCase

  1. a == b using StringComparer.OrdinalIgnoreCase, затем a == b using StringComparer.InvariantCultureIgnoreCase
  2. a != b using StringComparer.OrdinalIgnoreCase, затем a != b using StringComparer.InvariantCultureIgnoreCase
  3. a == b using StringComparer.InvariantCultureIgnoreCase, затем a == b using StringComparer.OrdinalIgnoreCase
  4. a != b using StringComparer.InvariantCultureIgnoreCase, затем a != b using StringComparer.OrdinalIgnoreCase

До сих пор я знаю, что оператор номер 3 не соответствует действительности из-за пример a = STRASSE и b = Straße из комментария в this вопрос.

В идеале я хотел бы получить объяснение, почему утверждение истинно или пример, когда это неверно.

+0

Я не верю ни одному из этих утверждений для всех входов. Однако результат отношений '==' и '! =' Для любой конкретной строки гарантированно стабилен, потому что порядковый номер, с одной стороны, представляет собой просто сравнение массива значений ushort (за исключением случая невежества) и инварианта культура с другой гарантируется, что она не изменится в разных культурах и версиях .NET. –

ответ

0

Разница между ординальным и инвариантным сопоставлением - это разница между неязыковой и лингвистической сортировкой.

Теоретически 1 должно быть истинным (это если вы не игнорируете случай), но правила обсадной колонны различны, если вы используете нелингвистический корпус и лингвистический корпус. Остальные - ложные.

Смежные вопросы