如何HashSet<string>.Contains()
在不区分大小写模式下使用方法?
问问题
38865 次
4 回答
122
您可以HashSet
使用自定义比较器创建:
HashSet<string> hs = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
hs.Add("Hello");
Console.WriteLine(hs.Contains("HeLLo"));
于 2010-04-19T13:19:37.427 回答
10
您需要使用正确的方法创建它IEqualityComparer
:
HashSet<string> hashset = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
于 2010-04-19T13:19:21.123 回答
6
正如其他答案所证明的那样,这里没有必要,但是在您不使用字符串的其他情况下,您可以选择实现 anIEqualityComparer<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());
于 2010-04-19T13:21:52.347 回答
5
您应该使用允许您指定要使用的构造函数IEqualityComparer
。
HashSet<String> hashSet = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase);
StringComparer对象提供了一些常用的比较器作为静态属性。
于 2010-04-19T13:20:31.123 回答