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

Ответ 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());