Какой код лучше:
int index = fileName.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase);
или
int index = fileName.LastIndexOf(".", StringComparison.OrdinalIgnoreCase);
Какой код лучше:
int index = fileName.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase);
или
int index = fileName.LastIndexOf(".", StringComparison.OrdinalIgnoreCase);
Если вы действительно хотите совместить только точку, тогда CultureInfo.Ordinal будет быстрее, так как нет разницы в событиях.
Ни один код не всегда лучше. Они делают разные вещи, поэтому они хорошо разбираются в разных вещах.
InvariantCultureIgnoreCase
использует правила сравнения на основе английского языка, но без каких-либо региональных вариантов. Это хорошо для нейтрального сравнения, которое все еще учитывает некоторые лингвистические аспекты.
OrdinalIgnoreCase
сравнивает коды символов без культурных аспектов. Это полезно для точных сравнений, таких как имена пользователей, но не для сортировки строк с необычными символами типа é
или ö
. Это также быстрее, потому что перед сравнением нет никаких дополнительных правил.
FXCop обычно предпочитает OrdinalIgnoreCase
. Но ваши требования могут отличаться.
Для английского языка очень мало различий. Это когда вы блуждаете по языкам, которые имеют разные письменные конструкции, что становится проблемой. Я недостаточно опытен, чтобы дать вам больше.
OrdinalIgnoreCase
Возвращаемый StringComparer Основные особенности OrdinalIgnoreCase символы в строках сравнить, как если бы они были преобразованы в верхний регистр с использованием условных обозначений инвариантной культуры, а затем выполняет простое сравнение байтов который не зависит от языка. Это наиболее удобно, если сравнение строк, которые генерируются программно или при сравнении нечувствительные к регистру ресурсы, такие как путей и имен файлов. http://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase.aspx
InvariantCultureIgnoreCase
Возвращаемый StringComparer Свойство InvariantCultureIgnoreCase сравнивает строки в лингвистическом который игнорирует случай, но он не подходит для отображения в любом особой культуры. Его основные приложение должно заказывать строки в путь, который будет идентичен культур. http://msdn.microsoft.com/en-us/library/system.stringcomparer.invariantcultureignorecase.aspx
Инвариантная культура - это Объект CultureInfo, возвращаемый Свойство InvariantCulture.
InvariantCultureIgnoreCase свойство фактически возвращает экземпляр анонимного класса, полученного из Класс StringComparer.
Кажется, вы выполняете сопоставления имен файлов, поэтому я просто добавлю, что OrdinalIgnoreCase
ближе всего к тому, что делает NTFS (это не совсем то же самое, но оно ближе, чем InvariantCultureIgnoreCase
)