Ho un metodo con parametro HashSet. E ho bisogno di fare-case insensitive contiene al suo interno:Make HashSet <string> senza distinzione tra maiuscole e minuscole
public void DoSomething(HashSet<string> set, string item)
{
var x = set.Contains(item);
...
}
E 'un modo per rendere HashSet esistente-case insensitive (non creano nuova)?
Sto cercando una soluzione con la migliore perfomance.
Modifica
Contiene può essere chiamato più volte. Quindi le estensioni IEnumerable non sono accettabili per me a causa della minore perfomance rispetto al metodo nativo HashSet Contains.
Soluzione
Dal, risposta alla mia domanda è no, è impossibile, ho creato e utilizzato seguente metodo:
public HashSet<string> EnsureCaseInsensitive(HashSet<string> set)
{
return set.Comparer == StringComparer.OrdinalIgnoreCase
? set
: new HashSet<string>(set, StringComparer.OrdinalIgnoreCase);
}
Probabilmente dovrete creare uno nuovo ... –
Eventuali duplicati: http://stackoverflow.com/questions/2667635/how-to-use-hashsetstring-contains-method-in-case-insensitive- mode (vedi la risposta dell'utente414076) –
È necessario decidere in anticipo se il 'HashSet' considera il caso fornendo un comparatore. Tuttavia, vale la pena considerare che il set {"A", "a"} conterrà solo un elemento con un confronto senza distinzione tra maiuscole e minuscole. – spender