Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.
Un confronto sensibile alla cultura fra due stringhe dipende dal fatto che ognuno dei caratteri nelle stringhe possieda diverse categorie di pesi di ordinamento, inclusi scritture, alfabetici, maiuscole e minuscole e diacritici. Una chiave di ordinamento funge da repository di questi pesi per una determinata stringa.
Il metodo CompareInfo.GetSortKey restituisce un'istanza della classe SortKey che riflette la mappatura sensibile alla cultura dei caratteri in una stringa specificata. Il valore di un SortKey oggetto è costituito dai relativi dati chiave, restituiti dalla KeyData proprietà . Questi dati chiave sono costituiti da una serie di byte che codificano la stringa, le regole culturali di ordinamento e le opzioni specificate dall'utente per il confronto. Un confronto con le chiavi di ordinamento è costituito da un confronto bit per bit dei dati della chiave corrispondenti in ogni chiave di ordinamento. Ad esempio, se si crea una chiave di ordinamento chiamando il metodo GetSortKey(String, CompareOptions) con un valore di CompareOptions.IgnoreCase, un'operazione di confronto di stringhe che usa la chiave di ordinamento non fa distinzione tra maiuscole e minuscole.
Dopo aver creato una chiave di ordinamento per una stringa, si confrontano le chiavi di ordinamento chiamando il metodo statico SortKey.Compare . Questo metodo esegue un semplice confronto byte per byte, quindi è molto più veloce del metodo String.Compare o del CompareInfo.Compare.
Annotazioni
È possibile scaricare le Tabelle dei pesi di ordinamento, un insieme di file di testo che contengono informazioni sui pesi dei caratteri utilizzati nelle operazioni di ordinamento e confronto per i sistemi operativi Windows, la Tabella degli elementi di collazione Unicode predefinita, e la tabella dei pesi di ordinamento per Linux e macOS.
Considerazioni sulle prestazioni
Quando si esegue un confronto tra stringhe, i Compare metodi e CompareInfo.Compare producono gli stessi risultati, ma sono destinati a scenari diversi.
A livello generale, il CompareInfo.Compare metodo genera la chiave di ordinamento per ogni stringa, esegue il confronto e quindi rimuove la chiave di ordinamento e restituisce il risultato del confronto. Tuttavia, il CompareInfo.Compare metodo in realtà non genera un'intera chiave di ordinamento per eseguire il confronto. Il metodo genera invece i dati chiave per ogni elemento di testo, ovvero carattere di base, coppia di surrogati o sequenza di caratteri combinati, in ogni stringa. Il metodo confronta quindi i dati chiave per gli elementi di testo corrispondenti. L'operazione termina non appena viene determinato il risultato finale del confronto. Le informazioni sulla chiave di ordinamento vengono calcolate, ma non viene creato alcun SortKey oggetto. Questa strategia è economica in termini di prestazioni se entrambe le stringhe vengono confrontate una volta, ma diventa costoso se le stesse stringhe vengono confrontate più volte.
Il Compare metodo richiede la generazione di un SortKey oggetto per ogni stringa prima di eseguire il confronto. Questa strategia è costosa in termini di prestazioni per il primo confronto a causa del tempo e della memoria investita per generare gli SortKey oggetti. Tuttavia, diventa economico se le stesse chiavi di ordinamento vengono confrontate più volte.
Si supponga, ad esempio, di scrivere un'applicazione che cerca in una tabella di database la riga in cui la colonna di indice basata su stringa corrisponde a una stringa di ricerca specificata. La tabella contiene migliaia di righe e il confronto tra la stringa di ricerca e l'indice in ogni riga richiederà molto tempo. Pertanto, quando l'applicazione archivia una riga e la relativa colonna di indice, genera e archivia anche la chiave di ordinamento per l'indice in una colonna dedicata al miglioramento delle prestazioni di ricerca. Quando l'applicazione cerca una riga di destinazione, confronta la chiave di ordinamento per la stringa di ricerca con la chiave di ordinamento per la stringa di indice, anziché confrontare la stringa di ricerca con la stringa di indice.
Considerazioni sulla sicurezza
Il metodo CompareInfo.GetSortKey(String, CompareOptions) restituisce un oggetto SortKey con un valore basato su una stringa specificata e un valore CompareOptions, e le impostazioni culturali associate all'oggetto sottostante CompareInfo. Se una decisione di sicurezza dipende da un confronto di stringhe o da una modifica del caso, è consigliabile usare il CompareInfo.GetSortKey(String, CompareOptions) metodo delle impostazioni cultura invarianti per garantire che il comportamento dell'operazione sia coerente, indipendentemente dalle impostazioni cultura del sistema operativo.
Per ottenere una chiave di ordinamento, seguire questa procedura:
Recuperare la cultura invariante dalla proprietà CultureInfo.InvariantCulture.
Recuperare un oggetto CompareInfo della cultura invariante dalla proprietà CultureInfo.CompareInfo.
Chiamare il metodo CompareInfo.GetSortKey(String, CompareOptions) .
L'utilizzo del valore di un SortKey oggetto equivale a chiamare il metodo Windows LCMapString con il valore LCMAP_SORTKEY specificato. Tuttavia, per l'oggetto SortKey , le chiavi di ordinamento per i caratteri inglesi precedono le chiavi di ordinamento per i caratteri coreani.
SortKey gli oggetti possono essere serializzati, ma solo in modo che possano attraversare AppDomain oggetti. Se un'applicazione serializza un SortKey oggetto, l'applicazione deve rigenerare tutte le chiavi di ordinamento quando è presente una nuova versione di .NET.
Per altre informazioni sulle chiavi di ordinamento, vedere Unicode Technical Standard #10, "Unicode Collation Algorithm" nel sito Web Unicode Consortium.