Как использовать 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());