Confronto e ordinamento di dati per una lingua specifica

L'ordine alfabetico e le convenzioni per la sequenza di elementi varia in base alla lingua. L'ordinamento può, ad esempio, tenere conto delle maiuscole o meno oppure basarsi sulla fonetica o sulla grafia dei caratteri. Nelle lingue dell'Estremo Oriente gli ordinamenti vengono disposti in base al tratto e al radicale di ideogrammi. Gli ordinamenti possono variare anche in base all'ordine di base utilizzato dalla lingua e dalla cultura per l'alfabeto. La lingua svedese, ad esempio, dispone di un carattere Æ che viene ordinato alfabeticamente dopo la lettera Z. Anche nella lingua tedesca esiste questo carattere, ma viene ordinato alfabeticamente come ae dopo la lettera A. Un'applicazione internazionale deve essere in grado di confrontare e ordinare i dati in base alla lingua, in modo da supportare le convenzioni di ordinamento specifiche delle diverse lingue.

Nota

In alcuni scenari un comportamento dipendente dalla lingua non rappresenta la soluzione appropriata. Per ulteriori informazioni sui casi e sui modi in cui devono essere eseguite operazioni indipendenti dalla lingua, vedere Operazioni sulle stringhe indipendenti dalla lingua.

Confronto di stringhe

La classe CompareInfo fornisce un insieme di metodi che è possibile utilizzare per eseguire confronti di stringhe dipendenti dalla lingua. La classe CultureInfo dispone di una proprietà CultureInfo.CompareInfo che rappresenta un'istanza di questa classe. Questa proprietà definisce la modalità di confronto e ordinamento delle stringhe per una lingua specifica. Le informazioni nella proprietà CultureInfo.CompareInfo vengono utilizzate dal metodo String.Compare per confrontare le stringhe. Il metodo String.Compare restituisce un valore integer negativo se stringa1 è minore di stringa2, un valore zero se stringa1 e stringa2 sono uguali e un valore integer positivo se stringa1 è maggiore di stringa2.

Nell'esempio di codice riportato di seguito viene illustrato come due stringhe possono essere valutate in modo diverso dal metodo String.Compare in base alla lingua utilizzata per eseguire il confronto. Innanzitutto l'oggetto CurrentCulture viene impostato sulla lingua danese parlata in Danimarca e viene eseguito il confronto delle stringhe "Apple" e "Æble". Nella lingua danese il carattere Æ viene considerato come una lettera singola e viene ordinato alfabeticamente dopo la lettera Z. Di conseguenza, la stringa "Æble" segue la stringa "Apple" nell'ordine alfabetico della lingua danese. Se successivamente l'oggetto CurrentCulture viene impostato sulla lingua inglese parlata negli Stati Uniti e viene eseguito nuovamente il confronto tra le stringhe "Apple" e "Æble", la stringa "Æble" viene ordinata prima della stringa "Apple". Nella lingua inglese infatti il carattere Æ viene considerato come un simbolo speciale, ordinato alfabeticamente prima della lettera A.

Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic

Public Class TestClass
   Public Shared Sub Main()
      Dim str1 As String = "Apple"
      Dim str2 As String = "Æble"
      
      ' Sets the CurrentCulture to Danish in Denmark.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
      Dim result1 As Integer = [String].Compare(str1, str2)
      Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
         is ""da-DK""," + ControlChars.Newline + " the result of _
         comparing_{0} with {1} is: {2}", str1, str2, result1)
      
      ' Sets the CurrentCulture to English in the U.S.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      Dim result2 As Integer = [String].Compare(str1, str2)
      Console.WriteLine(ControlChars.Newline + "When the _
         CurrentCulture is""en-US""," + ControlChars.Newline + " _
         the result of comparing {0} with {1} is: {2}", str1, _
         str2,result2)
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class CompareStringSample
{
   public static void Main()
   {
      string str1 = "Apple";
      string str2 = "Æble"; 

      // Sets the CurrentCulture to Danish in Denmark.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
      // Compares the two strings.
      int result1 = String.Compare(str1, str2);
      Console.WriteLine("\nWhen the CurrentCulture is \"da-DK\",\nthe 
            result of comparing {0} with {1} is: {2}",str1, str2, 
            result1);

      // Sets the CurrentCulture to English in the U.S.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Compares the two strings.
      int result2 = String.Compare(str1, str2);
      Console.WriteLine("\nWhen the CurrentCulture is \"en-US\",\nthe 
            result of comparing {0} with {1} is: {2}",str1, str2, 
            result2);
   }
}

Se si esegue questo codice, l'output avrà il seguente aspetto:

When the CurrentCulture is "da-DK", 
the result of comparing Apple with Æble is: -1

When the CurrentCulture is "en-US", 
the result of comparing Apple with Æble is: 1

Per ulteriori informazioni sul confronto di stringhe, vedere Classe String e Confronto di stringhe.

Uso di criteri di ordinamento alternativi

In alcune lingue vengono supportati più criteri di ordinamento. Nella lingua "zh-CN" (cinese parlato in Cina), ad esempio, viene supportato un ordinamento in base alla pronuncia (valore predefinito) e un ordinamento in base al numero di tratti. Quando si crea un CultureInfo utilizzando il nome di una lingua, ad esempio "zh-CN", viene utilizzato il criterio di ordinamento predefinito. Per specificare un criterio di ordinamento alternativo, creare un oggetto CultureInfo utilizzando l'identificatore LCID per il criterio di ordinamento alternativo. Successivamente, ottenere un oggetto CompareInfo, da utilizzare nei confronti di stringhe, dall'oggetto CultureInfo.CompareInfo. In alternativa, è possibile creare direttamente un oggetto CompareInfo utilizzando il metodo CompareInfo.GetCompareInfo (Int32) e specificando l'identificatore delle impostazioni internazionali per il criterio di ordinamento alternativo.

Nella tabella riportata di seguito vengono elencate le lingue in cui sono supportati criteri di ordinamento alternativi e gli identificatori LCID per i criteri di ordinamento predefiniti e alternativi.

Nome della lingua Paese in cui è parlata la lingua Nome dell'ordinamento predefinito e LCID Nome dell'ordinamento alternativo e LCID

es-ES

Spagnolo - Spagna

Internazionale: 0x00000C0A

Tradizionale: 0x0000040A

zh-TW

Cinese - Taiwan

Numero tratti: 0x00000404

Bopomofo: 0x00030404

zh-CN

Cinese - Cina (RPC)

Pronuncia: 0x00000804

Numero tratti: 0x00020804

zh-HK

Cinese - Hong Kong S.A.R.

Numero tratti: 0x00000c04

Numero tratti: 0x00020c04

zh-SG

Cinese - Singapore

Pronuncia: 0x00001004

Numero tratti: 0x00021004

zh-MO

Cinese - Macao S.A.R.

Pronuncia: 0x00001404

Numero tratti: 0x00021404

ja-JP

Giapponese - Giappone

Valore predefinito: 0x00000411

Unicode: 0x00010411

ko-KR

Coreano - Corea

Valore predefinito: 0x00000412

Korean Xwansung - Unicode: 0x00010412

de-DE

Tedesco - Germania

Dizionario: 0x00000407

Phone Book Sort DIN: 0x00010407

hu-HU

Ungherese - Ungheria

Valore predefinito: 0x0000040e

Ordinamento tecnico: 0x0001040e

ka-GE

Georgiano - Georgia

Tradizionale: 0x00000437

Ordinamento moderno: 0x00010437

Ricerca di stringhe

È possibile utilizzare il metodo di overload CompareInfo.IndexOf per restituire l'indice con inizio zero di un carattere o di una sottostringa all'interno di una stringa specificata. Il metodo restituisce un valore integer negativo se il carattere o la sottostringa non viene trovato nella stringa specificata. Quando si esegue la ricerca di un carattere specificato utilizzando CompareInfo.IndexOf, tenere presente che gli overload dei metodi che accettano un parametro CompareOptions eseguono il confronto in modo diverso rispetto agli overload dei metodi che non accettano un parametro di questo tipo. Gli overload CompareInfo.IndexOf che ricercano un tipo char (Char in Visual Basic) e non accettano un parametro di tipo CompareOptions, eseguono una ricerca dipendente dalla lingua. Questo significa che se il tipo char corrisponde a un valore Unicode che rappresenta un carattere precomposto, ad esempio la legatura "Æ"u00C6), potrebbe essere considerato equivalente a qualsiasi occorrenza dei relativi componenti nella sequenza corretta, ad esempio "AE" (\u0041\u0045), in base alla lingua. Per eseguire una ricerca ordinale, indipendentemente alla lingua, in cui il tipo char viene considerato equivalente a un altro tipo char solo se i valori Unicode sono gli stessi, utilizzare uno degli overload CompareInfo.IndexOf che accetta un parametro CompareOptions. Impostare il parametro CompareOptions sul valore CompareOptions.Ordinal.

Per eseguire una ricerca ordinale, è possibile inoltre utilizzare gli overload del metodo String.IndexOf che ricercano un tipo char. Si noti che la ricerca di una stringa eseguita dagli overload del metodo String.IndexOf è dipendente dalla lingua.

Nell'esempio di codice riportato di seguito vengono illustrati i risultati differenti restituiti dal metodo CompareInfo.IndexOf(string, char) in base alla lingua impostata. Viene creato un CultureInfo per "da-DK" (danese, Danimarca). Successivamente vengono utilizzati gli overload del metodo CompareInfo.IndexOf per eseguire la ricerca del carattere "Æ" nelle stringhe "Æble" e "aeble." Si noti che per la lingua "da-DK", il metodo CompareInfo.IndexOf che accetta un parametro CompareOptions.Ordinal e il metodo CompareInfo.Index che non accetta un parametro CompareOptions.Ordinal restituiscono lo stesso risultato. Il carattere "Æ" viene considerato equivalente solo al valore di codice Unicode \u00E6.

Imports System
Imports System.Globalization
Imports System.Threading
Imports Microsoft.VisualBasic

Public Class CompareClass
   Public Shared Sub Main()
      Dim str1 As String = "Æble"
      Dim str2 As String = "aeble"
      Dim find As Char = "Æ"
      
      ' Creates a CultureInfo for Danish in Denmark.
      Dim ci As New CultureInfo("da-DK")
      
      Dim result1 As Integer = ci.CompareInfo.IndexOf(str1, find)
      Dim result2 As Integer = ci.CompareInfo.IndexOf(str2, find)
      Dim result3 As Integer = ci.CompareInfo.IndexOf(str1, find, _ 
         CompareOptions.Ordinal)
      Dim result4 As Integer = ci.CompareInfo.IndexOf(str2, find, _
         CompareOptions.Ordinal)      
      
      Console.WriteLine(ControlChars.Newline + "CultureInfo is set to _
         {0}", ci.DisplayName)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str1, result1)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str2, result2)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char, CompareOptions) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str1, result3)
      Console.WriteLine(ControlChars.Newline + "Using _
         CompareInfo.IndexOf(string, char, CompareOptions) method" + _
         ControlChars.Newline + " the result of searching for {0} in the _
         string {1} is: {2}", find, str2, result4)
   End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class CompareClass
{

   public static void Main()
   {
      string str1 = "Æble";
      string str2 = "aeble"; 
      char find = 'Æ';

      // Creates a CultureInfo for Danish in Denmark.
      CultureInfo ci= new CultureInfo("da-DK");

      int result1 = ci.CompareInfo.IndexOf(str1, find);
      int result2 = ci.CompareInfo.IndexOf(str2, find);
      int result3 = ci.CompareInfo.IndexOf(str1, find,   
         CompareOptions.Ordinal);
      int result4 = ci.CompareInfo.IndexOf(str2, find, 
         CompareOptions.Ordinal);

      Console.WriteLine("\nCultureInfo is set to {0} ", ci.DisplayName);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char) 
         method\nthe result of searching for {0} in the string {1} is: 
         {2}", find, str1, result1);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char) 
         method\nthe result of searching for {0} in the string {1} is: 
         {2}", find, str2, result2);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char, 
         CompareOptions) method\nthe result of searching for {0} in the 
         string {1} is: {2}", find, str1, result3);
      Console.WriteLine("\nUsing CompareInfo.IndexOf(string, char, 
         CompareOptions) method\nthe result of searching for {0} in the 
         string {1} is: {2}", find, str2, result4);
   }
}

L'output del codice è il seguente:

CultureInfo is set to Danish (Denmark) 

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string aeble is: -1

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string aeble is: -1

Se si sostituisce CultureInfo ci = new CultureInfo ("da-DK"); con CultureInfo ci = new CultureInfo ("en-US"), il metodo CompareInfo.Index con il parametro CompareOptions.Ordinal e il metodo CompareInfo.Index senza il parametro CompareOptions.Ordinal restituiscono risultati differenti. Il confronto dipendente dalla lingua eseguito dal metodo CompareInfo.IndexOf(string, char) valuta il carattere "Æ" come se fosse equivalente ai relativi componenti "ae", mentre il confronto ordinale indipendente dalla lingua eseguito dal metodo CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) non restituisce il carattere "Æ" equivalente ad "ae", poiché i relativi valori di codice Unicode non corrispondono.

Quando si ricompila e si esegue il codice per la lingua "en-US", viene prodotto il seguente output:

The CurrentCulture property is set to English (United States) 

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char) method
the result of searching for Æ in the string aeble is: 0

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string Æble is: 0

Using CompareInfo.IndexOf(string, char, CompareOptions) method
the result of searching for Æ in the string aeble is: -1

Ordinamento di stringhe

La classe Array fornisce un metodo di overload Array.Sort che consente di ordinare le matrici in base alla proprietà CultureInfo.CurrentCulture. Nell'esempio seguente viene creata una matrice di tre stringhe. Dapprima CurrentCulture viene impostato su "en-US" e viene chiamato il metodo Array.Sort. Il criterio di ordinamento risultante è basato sulle convenzioni di ordinamento per la lingua "en-US". Successivamente, l'oggetto CurrentCulture viene impostato su "da-DK" e viene chiamato nuovamente il metodo Array.Sort. Si noti che il criterio di ordinamento risultante differisce da "en-US" in quanto vengono utilizzate le convenzioni di ordinamento per la lingua "da-DK" .

Imports System
Imports System.Threading
Imports System.IO
Imports System.Globalization
Imports Microsoft.VisualBasic

Public Class TextToFile   
   Public Shared Sub Main()
      Dim str1 As [String] = "Apple"
      Dim str2 As [String] = "Æble"
      Dim str3 As [String] = "Zebra"
      
      ' Creates and initializes a new Array to store 
      ' these date/time objects.
      Dim stringArray As Array = Array.CreateInstance(GetType([String]), _
         3)
      stringArray.SetValue(str1, 0)
      stringArray.SetValue(str2, 1)
      stringArray.SetValue(str3, 2)
      
      ' Displays the values of the Array.
      Console.WriteLine(ControlChars.Newline + "The Array initially _
         contains the following strings:")
      PrintIndexAndValues(stringArray)
      
      ' Sets the CurrentCulture to "en-US".
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      ' Sorts the values of the Array.
      Array.Sort(stringArray)
      
      ' Displays the values of the Array.
      Console.WriteLine(ControlChars.Newline + "After sorting for the _
         culture ""en-US"":")
      PrintIndexAndValues(stringArray)
      
      ' Sets the CurrentCulture to "da-DK".
      Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
      ' Sort the values of the Array.
      Array.Sort(stringArray)
      
      ' Displays the values of the Array.
      Console.WriteLine(ControlChars.Newline + "After sorting for the _
         culture ""da-DK"":")
      PrintIndexAndValues(stringArray)
   End Sub

   Public Shared Sub PrintIndexAndValues(myArray As Array)
      Dim i As Integer
      For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
         Console.WriteLine(ControlChars.Tab + "[{0}]:" + _
            ControlChars.Tab + "{1}", i, myArray.GetValue(i))
      Next i
   End Sub 
End Class
using System;
using System.Threading;
using System.Globalization;

public class ArraySort 
{
   public static void Main(String[] args) 
   {
      String str1 = "Apple";
      String str2 = "Æble";
      String str3 = "Zebra";

      // Creates and initializes a new Array to store the strings.
      Array stringArray = Array.CreateInstance( typeof(String), 3 );
      stringArray.SetValue(str1, 0 );
      stringArray.SetValue(str2, 1 );
      stringArray.SetValue(str3, 2 );

      // Displays the values of the Array.
      Console.WriteLine( "\nThe Array initially contains the following 
            strings:" );
      PrintIndexAndValues(stringArray);

      // Sets the CurrentCulture to "en-US".
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Sort the values of the Array.
      Array.Sort(stringArray);

      // Displays the values of the Array.
      Console.WriteLine( "\nAfter sorting for the culture \"en-US\":" );
      PrintIndexAndValues(stringArray); 

      // Sets the CurrentCulture to "da-DK".
      Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
      // Sort the values of the Array.
      Array.Sort(stringArray);

      // Displays the values of the Array.
      Console.WriteLine( "\nAfter sorting for the culture \"da-DK\":" );
      PrintIndexAndValues(stringArray); 
   }
   public static void PrintIndexAndValues(Array myArray)  
   {
      for ( int i = myArray.GetLowerBound(0); i <= 
            myArray.GetUpperBound(0); i++ )
      Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }
}

L'output del codice è il seguente:

The Array initially contains the following strings:
   [0]:   Apple
   [1]:   Æble
   [2]:   Zebra

After sorting for the culture "en-US":
   [0]:   Æble
   [1]:   Apple
   [2]:   Zebra

After sorting for the culture "da-DK":
   [0]:   Apple
   [1]:   Zebra
   [2]:   Æble

Uso delle chiavi di ordinamento

Le chiavi di ordinamento vengono utilizzate per supportare gli ordinamenti che dipendono dalla lingua impostata. In base allo standard Unicode, a ciascun carattere in una stringa vengono assegnate più categorie di fattori di ordinamento, inclusi quello alfabetico, la combinazione di maiuscole e minuscole e i segni diacritici. Una chiave di ordinamento funge da repository di questi fattori per una determinata stringa. Una chiave di ordinamento, ad esempio, può contenere una stringa per i fattori alfabetici, seguita da una per i fattori relativi alle combinazioni di maiuscole e minuscole e così via. Per ulteriori informazioni sui concetti delle chiavi di ordinamento, vedere lo standard Unicode all'indirizzo www.unicode.org (informazioni in lingua inglese).

In .NET Framework, la classe SortKey esegue il mapping delle stringhe sulle relative chiavi di ordinamento e viceversa. È possibile utilizzare il metodo CompareInfo.GetSortKey per creare una chiave di ordinamento per una stringa specificata. La chiave di ordinamento risultante per una stringa specificata è una sequenza di byte che può variare in base ai valori di CurrentCulture e CompareOptions specificati. Se durante la creazione di una chiave di ordinamento, ad esempio, viene specificato IgnoreCase, nell'operazione di confronto di stringhe che utilizza tale chiave la distinzione tra maiuscole e minuscole verrà ignorata.

Una volta creata, una chiave di ordinamento per una stringa può essere passata come parametro ai metodi forniti dalla classe SortKey. Il metodo SortKey.Compare consente di confrontare le chiavi di ordinamento. Il metodo SortKey.Compare esegue un confronto semplice byte per byte che risulta più rapido rispetto al confronto eseguito dal metodo String.Compare. In applicazioni che richiedono un elevato numero di operazioni di ordinamento, è possibile ottimizzare le prestazioni mediante la generazione e l'archiviazione di chiavi di ordinamento per tutte le stringhe utilizzate dall'applicazione. Quando è necessario eseguire un'operazione di ordinamento e confronto, è possibile utilizzare le chiavi di ordinamento anziché le stringhe.

Nell'esempio di codice seguente vengono create le chiavi di ordinamento per due stringhe quando CurrentCulture è impostato su "da-DK". Le due stringhe vengono confrontate utilizzando il metodo SortKey.Compare e vengono visualizzati i risultati. Il metodo SortKey.Compare restituisce un valore integer negativo se stringa1 è minore di stringa2, zero (0) se stringa1 e stringa2 sono uguali e un valore integer positivo se stringa1 è maggiore di stringa2. Successivamente, l'oggetto CurrentCulture viene impostato sulla lingua "en-US" e vengono create le chiavi di ordinamento per le stesse stringhe. Le chiavi di ordinamento per le stringhe vengono confrontate e vengono visualizzati i risultati. Si noti che i risultati dell'ordinamento differiscono in base a CurrentCulture. Sebbene i risultati dell'esempio di codice riportato di seguito siano identici a quelli ottenuti confrontando queste stringhe nell'esempio fornito nel precedente paragrafo Confronto di stringhe di questo argomento, il metodo SortKey.Compare risulta più rapido del metodo String.Compare.

Imports System
Imports System.Threading
Imports System.Globalization
Imports Microsoft.VisualBasic

Public Class SortKeySample
   Public Shared Sub Main()
      Dim str1 As [String] = "Apple"
      Dim str2 As [String] = "Æble"
      
      ' Sets the CurrentCulture to "da-DK".
      Dim dk As New CultureInfo("da-DK")
      Thread.CurrentThread.CurrentCulture = dk
      
      ' Creates a culturally sensitive sort key for str1.
      Dim sc1 As SortKey = dk.CompareInfo.GetSortKey(str1)
      ' Create a culturally sensitive sort key for str2.
      Dim sc2 As SortKey = dk.CompareInfo.GetSortKey(str2)
      
      ' Compares the two sort keys and display the results.
      Dim result1 As Integer = SortKey.Compare(sc1, sc2)
      Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
         is ""da-DK""," + ControlChars.Newline + " the result of _
         comparing {0} with {1} is: {2}", str1, str2, result1)
      
      ' Sets the CurrentCulture to "en-US".
      Dim enus As New CultureInfo("en-US")
      Thread.CurrentThread.CurrentCulture = enus
      
      ' Creates a culturally sensitive sort key for str1.
      Dim sc3 As SortKey = enus.CompareInfo.GetSortKey(str1)
      ' Create a culturally sensitive sort key for str1.
      Dim sc4 As SortKey = enus.CompareInfo.GetSortKey(str2)
      
      ' Compares the two sort keys and display the results.
      Dim result2 As Integer = SortKey.Compare(sc3, sc4)
      Console.WriteLine(ControlChars.Newline + "When the CurrentCulture _
         is ""en-US""," + ControlChars.Newline + " the result of _
         comparing {0} with {1} is: {2}", str1, str2, result2)
   End Sub
End Class
using System;
using System.Threading;
using System.Globalization;

public class SortKeySample 
{
   public static void Main(String[] args) 
   {
      String str1 = "Apple";
      String str2 = "Æble";

      // Sets the CurrentCulture to "da-DK".
      CultureInfo dk = new CultureInfo("da-DK");
      Thread.CurrentThread.CurrentCulture = dk;

      // Creates a culturally sensitive sort key for str1.
      SortKey sc1 = dk.CompareInfo.GetSortKey(str1);
      // Create a culturally sensitive sort key for str2.
      SortKey sc2 = dk.CompareInfo.GetSortKey(str2);

      // Compares the two sort keys and display the results.
      int result1 = SortKey.Compare(sc1, sc2);
      Console.WriteLine("\nWhen the CurrentCulture is \"da-DK\",\nthe 
            result of comparing {0} with {1} is: {2}", str1, str2, 
            result1);

      // Sets the CurrentCulture to "en-US".
      CultureInfo enus = new CultureInfo("en-US");
      Thread.CurrentThread.CurrentCulture = enus ;

      // Creates a culturally sensitive sort key for str1.
      SortKey sc3 = enus.CompareInfo.GetSortKey(str1);
      // Create a culturally sensitive sort key for str1.
      SortKey sc4 = enus.CompareInfo.GetSortKey(str2);

      // Compares the two sort keys and display the results.
      int result2 = SortKey.Compare(sc3, sc4);
      Console.WriteLine("\nWhen the CurrentCulture is \"en-US\",\nthe 
            result of comparing {0} with {1} is: {2}", str1, str2, 
            result2);
   }
}

L'output del codice è il seguente:

When the CurrentCulture is "da-DK", 
the result of comparing Apple with Æble is: -1

When the CurrentCulture is "en-US", 
the result of comparing Apple with Æble is: 1

Normalizzazione

È possibile normalizzare le stringhe in maiuscolo o minuscolo prima dell'ordinamento. Le regole per l'ordinamento e le maiuscole/minuscole sono specifiche della lingua. Anche nell'ambito delle lingue basate sul latino, ad esempio, esistono regole di ordinamento e composizione differenti. Solo in alcune lingue, incluso l'inglese, il criterio di ordinamento corrisponde all'ordine dei punti di codice, ad esempio A [65] viene prima di B [66].

Non utilizzare i punti di codice per eseguire ordinamenti e confronti di stringhe accurati. Inoltre in .NET Framework non viene imposta o garantita alcuna forma specifica di normalizzazione. L'utente deve scegliere la normalizzazione appropriata nelle applicazioni sviluppate.

Vedere anche

Riferimenti

CompareInfo Class
SortKey Class

Concetti

Operazioni sulle stringhe indipendenti dalla lingua

Altre risorse

Codifica e localizzazione