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