Mode d'emploi HashSet<string>.Contains()
en mode insensible à la casse ?
Réponses
Trop de publicités?Ce n'est pas nécessaire ici, comme d'autres réponses l'ont démontré, mais dans d'autres cas où vous n'utilisez pas une chaîne de caractères, vous pouvez choisir d'implémenter une fonction IEqualityComparer<T>
et ensuite vous pouvez utiliser un .Contains
surcharge. Voici un exemple utilisant une chaîne de caractères (là encore, d'autres réponses ont montré qu'il existe déjà un comparateur de chaînes de caractères que vous pouvez utiliser et qui répond à vos besoins). De nombreuses méthodes entourant IEnumerable<T>
ont des surcharges qui acceptent de tels comparateurs, il est donc bon d'apprendre à les mettre en œuvre.
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();
}
}
Et ensuite l'utiliser
bool contains = hash.Contains("foo", new CustomStringComparer());
Vous devez utiliser le Constructeur qui vous permet de spécifier le IEqualityComparer
que vous voulez utiliser.
HashSet<String> hashSet = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase);
En Comparateur de chaînes fournit certains comparateurs souvent utilisés comme propriétés statiques.