如何在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());