如何在案件不敏感模式下使用HashSet <string> .Contains()方法?</string>

时间:2010-04-19 13:16:00

标签: c# string hashset

如何在案例敏感模式下使用HashSet<string>.Contains()方法?

4 个答案:

答案 0 :(得分:110)

您可以使用自定义比较器创建HashSet

HashSet<string> hs = new HashSet<string>(StringComparer.OrdinalIgnoreCase);

hs.Add("Hello");

Console.WriteLine(hs.Contains("HeLLo"));

答案 1 :(得分:10)

您需要使用正确的IEqualityComparer

创建它
HashSet<string> hashset = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);

答案 2 :(得分:5)

您应该使用constructor来指定您要使用的IEqualityComparer

HashSet<String> hashSet = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase);

StringComparer对象提供了一些常用的比较器作为静态属性。

答案 3 :(得分:5)

这里没有必要,正如其他答案所示,但在其他不使用字符串的情况下,您可以选择实施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());