Как использовать HashSet.Содержит () метод в режиме без учета регистра?
Как использовать HashSet<string>.Contains() метод в режиме без учета регистра?
4 ответа:
Вы можете создать
HashSetс пользовательским компаратор:HashSet<string> hs = new HashSet<string>(StringComparer.OrdinalIgnoreCase); hs.Add("Hello"); Console.WriteLine(hs.Contains("HeLLo"));
вам нужно создать его с правом
IEqualityComparer:HashSet<string> hashset = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
вы должны использовать конструктор что позволяет вам указать
IEqualityComparerвы хотите использовать.HashSet<String> hashSet = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase);The StringComparer объект предоставляет некоторые часто используемые компараторы в качестве статических свойств.
это не обязательно здесь, как показали другие ответы, но в других случаях, когда вы не используете строку, вы можете реализовать
IEqualityComparer<T>и тогда вы можете использовать.Containsперегрузка. Вот пример использования строки (опять же, другие ответы показали, что уже есть компаратор строк, который вы можете использовать, который соответствует вашим потребностям). Многие методы, окружающиеIEnumerable<T>есть перегрузки, которые принимают такие компараторы, так что это хорошо, чтобы узнать, как реализовать их.class CustomStringComparer : IEqualityComparer<string> { public bool Equals(string x, string y) { return x.Equals(y, StringComparison.InvariantCultureIgnoreCase); } public int GetHashCode(string obj) { return obj.GetHashCode(); } }а затем использовать его
bool contains = hash.Contains("foo", new CustomStringComparer());