大文字と小文字を区別しないモードでHashSet<string>.Contains()
メソッドを使用するには?
カスタム比較子を使用してHashSet
を作成できます。
HashSet<string> hs = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
hs.Add("Hello");
Console.WriteLine(hs.Contains("HeLLo"));
適切なIEqualityComparer
で作成する必要があります:
HashSet<string> hashset = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
constructor を使用する必要があります。これにより、使用するIEqualityComparer
を指定できます。
HashSet<String> hashSet = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase);
StringComparer オブジェクトは、静的プロパティとしてよく使用される比較子を提供します。
他の答えが示したように、ここでは必要ありませんが、文字列を使用しない他の場合は、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());