Proprietà System.Globalization.CultureInfo.InvariantCulture
Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.
La cultura invariante è senza distinzione tra le impostazioni cultura; è associato alla lingua inglese, ma non a nessun paese o area geografica. Specificare le impostazioni cultura invarianti in base al nome usando una stringa vuota ("") nella chiamata a un CultureInfo metodo di creazione di istanze. Questa proprietà, CultureInfo.InvariantCulture, recupera anche un'istanza delle impostazioni cultura invarianti. Può essere usato in quasi tutti i metodi nello System.Globalization spazio dei nomi che richiede impostazioni cultura. Gli oggetti restituiti da proprietà come CompareInfo, DateTimeFormate NumberFormat riflettono anche il confronto delle stringhe e le convenzioni di formattazione delle impostazioni cultura invarianti.
A differenza dei dati sensibili alle impostazioni cultura, soggetti a modifiche in base alla personalizzazione dell'utente o agli aggiornamenti di .NET Framework o del sistema operativo, i dati delle impostazioni cultura invarianti sono stabili nel tempo e nelle impostazioni cultura installate e non possono essere personalizzati dagli utenti. Ciò rende particolarmente utili le impostazioni cultura invarianti per le operazioni che richiedono risultati indipendenti dalle impostazioni cultura, ad esempio operazioni di formattazione e analisi che rendono persistenti i dati formattati o operazioni di ordinamento e ordinamento che richiedono la visualizzazione dei dati in un ordine fisso indipendentemente dalle impostazioni cultura.
Operazioni con stringhe
È possibile usare le impostazioni cultura invarianti per le operazioni di stringa sensibili alle impostazioni cultura che non sono interessate dalle convenzioni delle impostazioni cultura correnti e coerenti tra le impostazioni cultura. Ad esempio, è possibile che i dati ordinati vengano visualizzati in un ordine fisso o applichino un set standard di convenzioni di maiuscole e minuscole alle stringhe indipendentemente dalle impostazioni cultura correnti. A tale scopo, passare l'oggetto InvariantCulture a un metodo con un CultureInfo parametro, ad esempio Compare(String, String, Boolean, CultureInfo) e ToUpper(CultureInfo).
Salvataggio permanente dei dati
La InvariantCulture proprietà può essere utilizzata per rendere persistenti i dati in un formato indipendente dalle impostazioni cultura. In questo modo viene fornito un formato noto che non cambia e che può essere usato per serializzare e deserializzare i dati tra le impostazioni cultura. Dopo la deserializzazione, i dati possono essere formattati in modo appropriato in base alle convenzioni culturali dell'utente corrente.
Ad esempio, se si sceglie di rendere persistenti i dati di data e ora in formato stringa, è possibile passare l'oggetto InvariantCulture al DateTime.ToString(String, IFormatProvider) metodo o DateTimeOffset.ToString(IFormatProvider) per creare la stringa e passare l'oggetto InvariantCulture al DateTime.Parse(String, IFormatProvider) metodo o DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles) per convertire la stringa in un valore di data e ora. Questa tecnica garantisce che i valori di data e ora sottostanti non cambino quando i dati vengono letti o scritti dagli utenti da impostazioni cultura diverse.
Nell'esempio seguente vengono utilizzate le impostazioni cultura invarianti per rendere persistente un DateTime valore come stringa. Analizza quindi la stringa e ne visualizza il valore usando le convenzioni di formattazione delle impostazioni cultura francese (Francia) e Tedesco (Germania).
using System;
using System.IO;
using System.Globalization;
public class Example
{
public static void Main()
{
// Persist the date and time data.
StreamWriter sw = new StreamWriter(@".\DateData.dat");
// Create a DateTime value.
DateTime dtIn = DateTime.Now;
// Retrieve a CultureInfo object.
CultureInfo invC = CultureInfo.InvariantCulture;
// Convert the date to a string and write it to a file.
sw.WriteLine(dtIn.ToString("r", invC));
sw.Close();
// Restore the date and time data.
StreamReader sr = new StreamReader(@".\DateData.dat");
String input;
while ((input = sr.ReadLine()) != null)
{
Console.WriteLine("Stored data: {0}\n" , input);
// Parse the stored string.
DateTime dtOut = DateTime.Parse(input, invC, DateTimeStyles.RoundtripKind);
// Create a French (France) CultureInfo object.
CultureInfo frFr = new CultureInfo("fr-FR");
// Displays the date formatted for the "fr-FR" culture.
Console.WriteLine("Date formatted for the {0} culture: {1}" ,
frFr.Name, dtOut.ToString("f", frFr));
// Creates a German (Germany) CultureInfo object.
CultureInfo deDe= new CultureInfo("de-De");
// Displays the date formatted for the "de-DE" culture.
Console.WriteLine("Date formatted for {0} culture: {1}" ,
deDe.Name, dtOut.ToString("f", deDe));
}
sr.Close();
}
}
// The example displays the following output:
// Stored data: Tue, 15 May 2012 16:34:16 GMT
//
// Date formatted for the fr-FR culture: mardi 15 mai 2012 16:34
// Date formatted for de-DE culture: Dienstag, 15. Mai 2012 16:34
Imports System.Globalization
Imports System.IO
Module Example
Public Sub Main()
' Persist the date and time data.
Dim sw As New StreamWriter(".\DateData.dat")
' Create a DateTime value.
Dim dtIn As DateTime = DateTime.Now
' Retrieve a CultureInfo object.
Dim invC As CultureInfo = CultureInfo.InvariantCulture
' Convert the date to a string and write it to a file.
sw.WriteLine(dtIn.ToString("r", invC))
sw.Close()
' Restore the date and time data.
Dim sr As New StreamReader(".\DateData.dat")
Dim input As String = String.Empty
Do While sr.Peek() >= 0
input = sr.ReadLine()
Console.WriteLine("Stored data: {0}" , input)
Console.WriteLine()
' Parse the stored string.
Dim dtOut As DateTime = DateTime.Parse(input, invC, DateTimeStyles.RoundtripKind)
' Create a French (France) CultureInfo object.
Dim frFr As New CultureInfo("fr-FR")
' Displays the date formatted for the "fr-FR" culture.
Console.WriteLine("Date formatted for the {0} culture: {1}" ,
frFr.Name, dtOut.ToString("f", frFr))
' Creates a German (Germany) CultureInfo object.
Dim deDe As New CultureInfo("de-De")
' Displays the date formatted for the "de-DE" culture.
Console.WriteLine("Date formatted for {0} culture: {1}" ,
deDe.Name, dtOut.ToString("f", deDe))
Loop
sr.Close()
End Sub
End Module
' The example displays the following output:
' Stored data: Tue, 15 May 2012 16:34:16 GMT
'
' Date formatted for the fr-FR culture: mardi 15 mai 2012 16:34
' Date formatted for de-DE culture: Dienstag, 15. Mai 2012 16:34
Decisioni relative alla sicurezza
Se si sta prendendo una decisione di sicurezza(ad esempio se consentire l'accesso a una risorsa di sistema) in base al risultato di un confronto tra stringhe o una modifica del caso, non è consigliabile usare le impostazioni cultura invarianti. È invece necessario eseguire un confronto ordinale con distinzione tra maiuscole e minuscole o senza distinzione tra maiuscole e minuscole chiamando un metodo che include un StringComparison parametro e specificando StringComparison.Ordinal o StringComparison.OrdinalIgnoreCase come argomento. Il codice che esegue operazioni di stringa sensibili alle impostazioni cultura può causare vulnerabilità di sicurezza se le impostazioni cultura correnti vengono modificate o se le impostazioni cultura nel computer che esegue il codice differiscono dalle impostazioni cultura usate per testare il codice. Al contrario, un confronto ordinale dipende esclusivamente dal valore binario dei caratteri confrontati.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per