Как использовать метод HashSet<string>.Contains()
в случае - нечувствительный режим?
Как использовать метод HashSet <string>.Contains() в случае - нечувствительный режим?
Ответ 1
Вы можете создать HashSet
с помощью пользовательского сопоставителя:
HashSet<string> hs = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
hs.Add("Hello");
Console.WriteLine(hs.Contains("HeLLo"));
Ответ 2
Вам нужно создать его с помощью правильного IEqualityComparer
:
HashSet<string> hashset = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
Ответ 3
Вы должны использовать конструктор , который позволяет вам указать IEqualityComparer
, который вы хотите использовать.
HashSet<String> hashSet = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase);
Объект StringComparer предоставляет некоторый часто используемый сравнитель как статические свойства.
Ответ 4
Здесь нет необходимости, как показали другие ответы, но в других случаях, когда вы не используете строку, вы можете выбрать 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());