如何在case-sensitive模式下使用HashSet <string> .Contains()方法?
如何在case-sensitive模式下使用HashSet<string>.Contains()
方法?
您可以使用自定义比较器创buildHashSet
:
HashSet<string> hs = new HashSet<string>(StringComparer.OrdinalIgnoreCase); hs.Add("Hello"); Console.WriteLine(hs.Contains("HeLLo"));
您需要使用正确的IEqualityComparer
创build它:
HashSet<string> hashset = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
您应该使用允许您指定要使用的IEqualityComparer
的构造函数 。
HashSet<String> hashSet = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase);
StringComparer对象提供了一些常用的比较器作为静态属性。
在这里没有必要,正如其他答案已经certificate,但在其他情况下,你不使用string,你可以select实现一个IEqualityComparer<T>
,然后你可以使用.Contains
重载。 这是一个使用string的例子(再次,其他答案已经表明,已经有一个string比较器,你可以使用,以满足您的需求)。 围绕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());