如何在案例敏感模式下使用HashSet<string>.Contains()
方法?
答案 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());