Tra le varie classi messe a disposizione da ASP.NET, il Dictionary resta una di quelle più utilizzate: la sua enorme versatilità compensa ampiamente la relativa inefficienza che si presenta in alcune situazioni, dove l'utilizzo di un Hashtable o di una classe più snella consentirebbe di ottenere prestazioni migliori.
Nella maggior parte dei casi, quando utilizziamo un Dictionary impostando una stringa come chiave (key), la modalità predefinita di confronto tra stringhe prevista dalla classe, che risponde a un criterio case-sensitive - considerando quindi rilevante la differenza tra lettere maiuscole e minuscole all'interno della chiave - può fare al caso nostro:
1 2 3 4 |
var Dict = new Dictionary<string,string>(); Dict["Romeo"] = "A stupid cat"; Dict["romeo"] = "A different (yet still stupid) cat"; Dict["ROMEO"] = "A third (nonetheless stupid) cat". |
E così via. Il Dictionary di cui sopra avrà quindi tre diverse entries, ciascuna accessibile mediante la propria chiave case-sensitive specifica.
Vi sono casi, però, in cui questo comportamento predefinito non ci è di grande aiuto: fortunatamente, il costruttore della classe prevede un overload specifico che possiamo utilizzare in tutti i casi in cui vogliamo che il confronto tra le chiavi-stringa risponda a un criterio diverso. Qualora volessimo un confronto case-insensitive, ad esempio, potremmo istanziare la classe nel seguente modo:
1 2 3 4 |
var Dict = new Dictionary<string,string>(StringComparer.OrdinalIgnoreCase); Dict["Romeo"] = "A stupid cat"; Dict["romeo"] = "The same stupid cat"; // it overwrites the previous entry. Dict["ROMEO"] = "Still the same stupid cat". // it overwrites the previous entry. |
Il Dictionary di cui sopra, a differenza del precedente, avrebbe in questo caso una singola entry, recuperabile utilizzando la chiave case-insensitive indicata.
E' opportuno considerare che, come ben spiegato in questa risposta su StackOverflow thread, la scelta di utilizzare StringComparer.OrdinalIgnoreCase fornirà alla nostra applicazione performance migliori rispetto allo StringComparer.InvariantCultureIgnoreCase, a patto che ci interessi togleire la discriminazione maiuscole/minuscole soltanto alle lettere.
Per il momento è tutto: felice sviluppo!