Хэш-код используется для коллекций на основе хэша, таких как Dictionary, Hashtable, HashSet и т. д. Цель этого кода - очень быстро предварительно сортировать конкретный объект, помещая его в определенную группу (ведро). Эта предварительная сортировка очень помогает в поиске этого объекта, когда вам нужно вернуть его из коллекции хешей, потому что код должен искать ваш объект только в одном ведро, а не во всех его объектах. Лучшее распределение хэш-кодов (лучшая уникальность) - более быстрое извлечение. В идеальной ситуации, когда каждый объект имеет уникальный хеш-код, поиск его является операцией O (1). В большинстве случаев он приближается к O (1).
Microsoft дает некоторые достойные указания для того, когда использовать InvariantCulture
свойство:
InvariantCulture... приложение должно использовать инвариантную культуру только для процессов, которые требуют независимых от культуры результатов, таких как форматирование и парсинг данных, которые сохраняются в файл. В других случаях это приводит к результатам, которые могли бы быть лингвистически неправильными или культурно несоответствующими.
Соображения безопасности
, Если решение безопасности будет принято на основе результата сравнения строк или изменения случая, Ваше приложение должно использовать порядковое сравнение, которое игнорирует регистр вместо того, чтобы использовать InvariantCulture. [...]
Строковые операции
, Если Ваше приложение должно выполнить чувствительную к культуре строковую операцию, которая не затронута значением CurrentCulture, оно должно использовать метод, который принимает параметр CultureInfo. [...]
Сохраняющиеся Данные
свойство InvariantCulture полезно для того, чтобы хранить данные, которые не будут отображены непосредственно пользователям. Хранить данные в независимом от культуры формате гарантирует известный формат, который не изменяется. Когда пользователи от различных культур получают доступ к данным, они могут быть отформатированы соответственно на основе определенного пользователя. [...]
Другие сообщения дали хороший совет, но я думал, что могло бы быть хорошо показать пример того, где это определенно имеет значение:
using System;
using System.Globalization;
using System.Threading;
class Test
{
static void Main()
{
CultureInfo turkish = CultureInfo.CreateSpecificCulture("tr");
Thread.CurrentThread.CurrentCulture = turkish;
// In Turkey, "i" does odd things
string lower = "i";
string upper = "I";
Console.WriteLine(lower.Equals(upper,
StringComparison.CurrentCultureIgnoreCase));
Console.WriteLine(lower.Equals(upper,
StringComparison.InvariantCultureIgnoreCase));
}
}
(Существует несомненно много других случаев - это было просто первым, о котором я думал.)