Questa pagina è stata utile?
I suggerimenti relativi al contenuto di questa pagina sono importanti. Comunicaceli.
Altri suggerimenti?
1500 caratteri rimanenti
Classe NumberFormatInfo
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Classe NumberFormatInfo

Fornisce informazioni di formattazione specifiche delle impostazioni cultura per la formattazione e l'analisi dei valori numerici.

System.Object
  System.Globalization.NumberFormatInfo

Spazio dei nomi:  System.Globalization
Assembly:  mscorlib (in mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class NumberFormatInfo : ICloneable, 
	IFormatProvider

Il tipo NumberFormatInfo espone i seguenti membri.

  NomeDescrizione
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNumberFormatInfoInizializza una nuova istanza modificabile della classe NumberFormatInfo che è indipendente dalle impostazioni cultura.
In alto

  NomeDescrizione
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCurrencyDecimalDigitsOttiene o imposta il numero di posizioni decimali da utilizzare nei valori di valuta.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCurrencyDecimalSeparatorOttiene o imposta la stringa da utilizzare come separatore decimale nei valori di valuta.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCurrencyGroupSeparatorOttiene o imposta la stringa di separazione dei gruppi di cifre che si trovano a sinistra del separatore decimale nei valori di valuta.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCurrencyGroupSizesOttiene o imposta il numero di cifre in ciascun gruppo che si trova a sinistra del separatore decimale nei valori di valuta.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCurrencyNegativePatternOttiene o imposta il modello di formattazione per i valori di valuta negativi.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCurrencyPositivePatternOttiene o imposta il modello di formattazione per i valori di valuta positivi.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCurrencySymbolOttiene o imposta la stringa da utilizzare come simbolo di valuta.
Proprietà pubblicaMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCurrentInfoOttiene un oggetto NumberFormatInfo in sola lettura che formatta i valori in base alle impostazioni cultura correnti.
Proprietà pubblicaDigitSubstitutionOttiene o imposta un valore che specifica come viene visualizzata la forma di una cifra dall'interfaccia utente grafica.
Proprietà pubblicaMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreInvariantInfoOttiene un oggetto NumberFormatInfo indipendente dalle impostazioni cultura.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreIsReadOnlyOttiene un valore che indica se l'oggetto NumberFormatInfo è di sola lettura.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNaNSymbolOttiene o imposta la stringa che rappresenta il valore IEEE NaN (Not a Number).
Proprietà pubblicaNativeDigitsOttiene o imposta una matrice di stringhe di cifre native equivalenti ai numeri europei da 0 a 9.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNegativeInfinitySymbolOttiene o imposta la stringa che rappresenta il valore di infinito negativo.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNegativeSignOttiene o imposta la stringa che indica che il numero associato è negativo.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNumberDecimalDigitsOttiene o imposta il numero di posizioni decimali da utilizzare nei valori numerici.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNumberDecimalSeparatorOttiene o imposta la stringa da utilizzare come separatore decimale nei valori numerici.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNumberGroupSeparatorOttiene o imposta la stringa di separazione dei gruppi di cifre che si trovano a sinistra del separatore decimale nei valori numerici.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNumberGroupSizesOttiene o imposta il numero di cifre in ciascun gruppo che si trova a sinistra del separatore decimale nei valori numerici.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNumberNegativePatternOttiene o imposta il modello di formattazione per i valori numerici negativi.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StorePercentDecimalDigitsOttiene o imposta il numero di posizioni decimali da utilizzare nei valori percentuali.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StorePercentDecimalSeparatorOttiene o imposta la stringa da utilizzare come separatore decimale nei valori percentuali.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StorePercentGroupSeparatorOttiene o imposta la stringa che separa i gruppi di cifre che si trovano a sinistra del separatore decimale nei valori percentuali.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StorePercentGroupSizesOttiene o imposta il numero di cifre in ciascun gruppo che si trova a sinistra del separatore decimale nei valori percentuali.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StorePercentNegativePatternOttiene o imposta il modello di formattazione per i valori percentuali negativi.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StorePercentPositivePatternOttiene o imposta il modello di formattazione per i valori percentuali positivi.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StorePercentSymbolOttiene o imposta la stringa da utilizzare come simbolo di percentuale.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StorePerMilleSymbolOttiene o imposta la stringa da utilizzare come simbolo di percentuale in millesimi.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StorePositiveInfinitySymbolOttiene o imposta la stringa che rappresenta il valore di infinito positivo.
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StorePositiveSignOttiene o imposta la stringa che indica che il numero associato è positivo.
In alto

  NomeDescrizione
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCloneCrea una copia superficiale dell'oggetto NumberFormatInfo.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreEquals(Object) Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object)
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetFormatOttiene un oggetto del tipo specificato che fornisce un servizio di formattazione dei numeri.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetHashCode Funge da funzione hash per un particolare tipo. (Ereditato da Object)
Metodo pubblicoMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetInstanceOttiene l'oggetto NumberFormatInfo associato all'oggetto IFormatProvider specificato.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetType Ottiene il Type dell'istanza corrente. (Ereditato da Object)
Metodo pubblicoMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreReadOnlyViene restituito un wrapper NumberFormatInfo in sola lettura.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
In alto

La classe NumberFormatInfo contiene informazioni specifiche delle impostazioni cultura utilizzate quando si formatta e si analizza un valore numerico. Queste informazioni includono il simbolo di valuta, il simbolo decimale, il simbolo di separatore dei gruppi e i simboli per il segno positivo e negativo.

Istanziare un oggetto NumberFormatInfo

È possibile istanziare un oggetto NumberFormatInfo che può rappresentare le convenzioni di formattazione delle impostazioni cultura correnti, le impostazioni cultura invarianti, le impostazioni cultura specifiche oppure le impostazioni cultura neutrali.

Istanziare un oggetto NumberFormatInfo per le impostazioni cultura correnti.

È possibile istanziare un oggetto NumberFormatInfo per le impostazioni cultura della thread corrente in uno dei seguenti modi. In ogni caso, l'oggetto restituito NumberFormatInfo è di sola lettura.

Nell'esempio seguente vengono utilizzati questi tre modi per creare oggetti NumberFormatInfo che rappresentano le convenzioni di formattazione delle impostazioni cultura correnti. Recupera anche il valore della proprietà IsReadOnly per illustrare che ogni oggetto è di sola lettura.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      NumberFormatInfo current1 = CultureInfo.CurrentCulture.NumberFormat;
      Console.WriteLine(current1.IsReadOnly);

      NumberFormatInfo current2 = NumberFormatInfo.CurrentInfo;
      Console.WriteLine(current2.IsReadOnly);

      NumberFormatInfo current3 = NumberFormatInfo.GetInstance(CultureInfo.CurrentCulture);
      Console.WriteLine(current3.IsReadOnly);
   }
}
// The example displays the following output:
//       True
//       True
//       True


È possibile creare un oggetto modificabile NumberFormatInfo che rappresenta le convenzioni delle impostazioni cultura della thread corrente in uno dei seguenti modi:

  • Recuperare un oggetto NumberFormatInfo in uno dei modi illustrati nell'esempio di codice precedente e chiamando il metodo Clone sull'oggetto restituito NumberFormatInfo. Verrà creata una copia dell'oggetto originale NumberFormatInfo, ma la proprietà IsReadOnly è false.

  • Chiamando il metodo CultureInfo.CreateSpecificCulture per creare un oggetto CultureInfo che rappresenta le impostazioni cultura correnti e quindi utilizzando la proprietà CultureInfo.NumberFormat per recuperare l'oggetto NumberFormatInfo.

Nell'esempio seguente vengono illustrate queste due modalità di creazione di un'istanza di un oggetto NumberFormatInfo e visualizza il valore della proprietà IsReadOnly per indicare che l'oggetto non è di sola lettura.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      NumberFormatInfo current1 = NumberFormatInfo.CurrentInfo;
      current1 = (NumberFormatInfo) current1.Clone();
      Console.WriteLine(current1.IsReadOnly);

      CultureInfo culture2 = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
      NumberFormatInfo current2 = culture2.NumberFormat;
      Console.WriteLine(current2.IsReadOnly);
   }
}
// The example displays the following output:
//       False
//       False


Si noti che il sistema operativo Windows consente all'utente di eseguire l'override di alcuni valori di proprietà NumberFormatInfo utilizzati nella formattazione numerica e nelle operazioni di analisi tramite l'elemento Paese e lingua nel Pannello di controllo. Ad esempio, con le impostazioni cultura inglesi (Stati Uniti) potrebbe scegliere di visualizzare i valori di valuta come 1.1 USD anziché quello predefinito $1,1. Gli oggetti NumberFormatInfo recuperati nei modi illustrati in precedenza riflettono tutti questi override dell'utente. Se non si desidera questo, è possibile creare un oggetto NumberFormatInfo che non rifletta l'override dell'utente (ed è anche lettura/scrittura anziché sola lettura) chiamando il costruttore CultureInfo.CultureInfo(String, Boolean) e fornendo un valore false per l'argomento useUserOverride. L'esempio seguente si riferisce ad un sistema con impostazioni cultura correnti inglesi (Stati Uniti) e di cui il simbolo di valuta è stato modificato dall'impostazione predefinita da $ a USD.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture;
      NumberFormatInfo nfi;

      culture = CultureInfo.CurrentCulture;
      nfi = culture.NumberFormat;
      Console.WriteLine("Culture Name:    {0}", culture.Name);
      Console.WriteLine("User Overrides:  {0}", culture.UseUserOverride);
      Console.WriteLine("Currency Symbol: {0}\n", culture.NumberFormat.CurrencySymbol);

      culture = new CultureInfo(CultureInfo.CurrentCulture.Name, false);
      Console.WriteLine("Culture Name:    {0}", culture.Name);
      Console.WriteLine("User Overrides:  {0}", culture.UseUserOverride);
      Console.WriteLine("Currency Symbol: {0}", culture.NumberFormat.CurrencySymbol);
   }
}
// The example displays the following output:
//       Culture Name:    en-US
//       User Overrides:  True
//       Currency Symbol: USD
//       
//       Culture Name:    en-US
//       User Overrides:  False
//       Currency Symbol: $


Se la proprietà CultureInfo.UseUserOverride è impostata su true, dalle impostazioni utente vengono recuperate anche le proprietà CultureInfo.DateTimeFormat, CultureInfo.NumberFormat e CultureInfo.TextInfo. Se le impostazioni utente non sono compatibili con le impostazioni cultura associate all'oggetto CultureInfo (ad esempio, nel caso in cui il calendario selezionato non fa parte dei calendari elencati dalla proprietà OptionalCalendars) i risultati dei metodi e i valori delle proprietà sono indefiniti.

Istanziare un oggetto NumberFormatInfo per le impostazioni cultura invarianti.

La lingua inglese rappresenta un tipo di impostazioni cultura indipendenti dalla lingua. Si basa sulla lingua inglese, ma in nessun paese/regione specifico in cui si parla l'inglese. Sebbene i dati delle impostazioni cultura specifiche possano essere dinamici e possano variare in base alle nuove convenzioni culturali o preferenze utente, i dati delle impostazioni cultura invarianti non cambiano. Un oggetto NumberFormatInfo che rappresenta le convenzioni di formattazione delle impostazioni cultura invarianti può essere utilizzato per operazioni di formattazione in cui le impostazioni cultura delle stringhe non dovrebbero variare.

È possibile creare un'istanza di un oggetto NumberFormatInfo che rappresenta le convenzioni di formattazione delle impostazioni cultura invarianti nei modi seguenti:

Nell'esempio seguente vengono utilizzati questi metodi per creare un'istanza di un oggetto NumberFormatInfo che rappresenta le impostazioni cultura invarianti. Indica se l'oggetto è di sola lettura.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      NumberFormatInfo nfi;

      nfi = System.Globalization.NumberFormatInfo.InvariantInfo;
      Console.WriteLine(nfi.IsReadOnly);               

      nfi = CultureInfo.InvariantCulture.NumberFormat;
      Console.WriteLine(nfi.IsReadOnly);               

      nfi = New NumberFormatInfo();
      Console.WriteLine(nfi.IsReadOnly);               
   }
}
// The example displays the following output:
//       True
//       True
//       False


Creare un'istanza di un oggetto NumberFormatInfo per impostazioni cultura specifiche

Le impostazioni cultura specifiche rappresentano un linguaggio parlato in un paese particolare. Ad esempio, en-US rappresenta le impostazioni cultura specifiche della lingua inglese parlata negli Stati Uniti e en-CA rappresenta le impostazioni cultura specifiche della lingua inglese parlata in Canada. È possibile creare un'istanza di un oggetto NumberFormatInfo che rappresenta le convenzioni di formattazione delle impostazioni cultura specifiche nei modi seguenti:

Nell'esempio seguente, vengono utilizzati questi quattro modi per creare un oggetto NumberFormatInfo che riflette le convenzioni di formattazione delle impostazioni cultura indonesiane (lndonesia). Viene inoltre indicato se ogni oggetto è di sola lettura.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture;
      NumberFormatInfo nfi;

      nfi = CultureInfo.GetCultureInfo("id-ID").NumberFormat;
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);

      culture = new CultureInfo("id-ID");
      nfi = NumberFormatInfo.GetInstance(culture);
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);

      culture = CultureInfo.CreateSpecificCulture("id-ID");
      nfi = culture.NumberFormat;
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);

      culture = new CultureInfo("id-ID");
      nfi = culture.NumberFormat;
      Console.WriteLine("Read-only: {0}", nfi.IsReadOnly);
   }
}
// The example displays the following output:
//       Read-only: True
//       Read-only: False
//       Read-only: False
//       Read-only: False


Creare un'istanza di un oggetto NumberFormatInfo per impostazioni cultura neutrali

Una impostazione cultura neutrale rappresenta una impostazione cultura o linguaggio che è indipendente dalla regione/paese. In genere è il padre di una o più impostazioni cultura specifiche. Ad esempio, fr rappresenta impostazioni cultura per la lingua francese e il padre delle impostazioni cultura fr-FR. È possibile creare un'istanza di un oggetto NumberFormatInfo che rappresenta le convenzioni di formattazione delle impostazioni cultura neutrali nelle stesse modalità con cui si crea un oggetto NumberFormatInfo che rappresenta le convenzioni di formattazione delle impostazioni cultura specifiche.

NotaNota

Nelle precedenti versioni di .NET Framework 3.5, un eventuale tentativo di recuperare un oggetto NumberFormatInfo che riflette le convenzioni di formattazione delle impostazioni cultura neutre genera un'eccezione NotSupportedException.

Tuttavia, dato che le impostazioni cultura neutre non dispongono di informazioni di formattazione specifiche della regione/paese, una impostazione cultura manca delle informazione specifiche delle impostazioni cultura. Piuttosto che popolare l'oggetto NumberFormatInfo con valori generici, .NET Framework restituisce un oggetto NumberFormatInfo che riflette le convenzioni di formattazione delle impostazioni cultura specifiche che sono figlie delle impostazioni cultura neutre. Ad esempio, l'oggetto NumberFormatInfo per le impostazioni cultura neutre en riflette le convenzioni di formattazione delle impostazioni cultura en-US e l'oggetto NumberFormatInfo per le impostazioni cultura fr riflette le convenzioni di formattazione delle impostazioni cultura fr-FR.

È possibile utilizzare il codice seguente per determinare quali convenzioni di formattazione specifiche delle impostazioni cultura sono rappresentate per ogni impostazione cultura neutra.


using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;

public class Example
{
   public static void Main()
   {
      // Get all the neutral cultures
      List<String> names = new List<String>();
      Array.ForEach(CultureInfo.GetCultures(CultureTypes.NeutralCultures),
                    culture => names.Add(culture.Name));
      names.Sort();
      foreach (var name in names) {
         // Ignore the invariant culture.
         if (name == "") continue;

         ListSimilarChildCultures(name);        
      }
   }

   private static void ListSimilarChildCultures(string name)
   { 
      // Create the neutral NumberFormatInfo object.
      NumberFormatInfo nfi = CultureInfo.GetCultureInfo(name).NumberFormat;
      // Retrieve all specific cultures of the neutral culture.
      CultureInfo[] cultures = Array.FindAll(CultureInfo.GetCultures(CultureTypes.SpecificCultures), 
                               culture => culture.Name.StartsWith(name + "-", StringComparison.OrdinalIgnoreCase));
      // Create an array of NumberFormatInfo properties
      PropertyInfo[] properties = typeof(NumberFormatInfo).GetProperties(BindingFlags.Instance | BindingFlags.Public);
      bool hasOneMatch = false;

      foreach (var ci in cultures) {
         bool match = true;     
         // Get the NumberFormatInfo for a specific culture.
         NumberFormatInfo specificNfi = ci.NumberFormat;
         // Compare the property values of the two.
         foreach (var prop in properties) {
            // We're not interested in the value of IsReadOnly.     
            if (prop.Name == "IsReadOnly") continue;

            // For arrays, iterate the individual elements to see if they are the same.
            if (prop.PropertyType.IsArray) { 
               IList nList = (IList) prop.GetValue(nfi, null);
               IList sList = (IList) prop.GetValue(specificNfi, null);
               if (nList.Count != sList.Count) {
                  match = false;
                  break;
               } 

               for (int ctr = 0; ctr < nList.Count; ctr++) {
                  if (! nList[ctr].Equals(sList[ctr])) {
                     match = false;
                     break;
                  }     
               }
            }   
            else if (! prop.GetValue(specificNfi).Equals(prop.GetValue(nfi))) {
               match = false;
               break;   
            }        
         }
         if (match) {
            Console.WriteLine("NumberFormatInfo object for '{0}' matches '{1}'", 
                                      name, ci.Name);
            hasOneMatch = true;
         }                                       
      }
      if (! hasOneMatch)
         Console.WriteLine("NumberFormatInfo object for '{0}' --> No Match", name);            

      Console.WriteLine();
   }
}


NumberFormatInfo e dati dinamici

I dati specifici delle impostazioni cultura per formattare i valori numerici forniti dalla classe NumberFormatInfo sono dinamici, come i dati relativi alla lingua forniti dalla classe CultureInfo. Non fare supposizioni sulla stabilità di valori per gli oggetti NumberFormatInfo associati agli oggetti particolari CultureInfo. Solo i dati forniti dalla lingua inglese e il relativo oggetto associato NumberFormatInfo sono stabili. Altri dati possono variare tra le sessioni dell'applicazione, oppure anche all'interno di una singola sessione, per i seguenti motivi:

  • Aggiornamenti del sistema. Preferenze relative alla lingua ad esempio la modifica di formato di valuta o del simbolo di valuta nel tempo. In questo caso, Windows Update include le modifiche al valore della proprietà NumberFormatInfo per impostazioni cultura specifiche.

  • Impostazioni cultura sostitutive. La classe CultureAndRegionInfoBuilder può essere utilizzata per sostituire i dati delle impostazioni cultura esistenti.

  • Propagazione delle modifiche ai valori della proprietà. Una serie di proprietà relative alle impostazioni cultura possono cambiare in fase di esecuzione, che, a sua volta, impone ai dati NumberFormatInfo la modifica. Ad esempio, le impostazioni cultura correnti possono essere modificate a livello di codice o attraverso azioni utente. In questo caso, l'oggetto NumberFormatInfo restituito dalla proprietà CurrentInfo si tramuta in un oggetto associato alle impostazioni cultura correnti.

  • Preferenze utente. Gli utenti dell'applicazione possono eseguire l'override di alcuni valori associati alle impostazioni cultura del sistema operativo corrente mediante le opzioni della regione e della lingua nel Pannello di Controllo. Ad esempio, gli utenti possono scegliere il simbolo di valuta o il simbolo di separatore decimale diverso. Se la proprietà CultureInfo.UseUserOverride è impostata su true (il valore predefinito), le proprietà dell'oggetto NumberFormatInfo vengono recuperate dalle impostazioni utente.

A partire da .NET Framework 2.0, tutte le proprietà dall'utente sottoponibili a override di un oggetto NumberFormatInfo vengono inizializzate quando viene creato l'oggetto. È ancora presente una possibilità di inconsistenza, poiché né la creazione di un oggetto né il processo di override eseguito dall'utente sono atomici, i valori pertinenti pertanto potrebbero cambiare durante la creazione di un oggetto. Tuttavia, queste inconsistenze dovrebbero essere estremamente rare.

È possibile controllare se un override dell'utente abbia conseguenze negli oggetti NumberFormatInfo che rappresentano le stesse impostazioni cultura delle impostazioni cultura del sistema. La tabella seguente elenca le modalità in cui un oggetto NumberFormatInfo può essere recuperato e indica se l'oggetto risultante riflette l'override dell'utente.

Sorgente di CultureInfo e oggetto NumberFormatInfo

Riflette gli override dell'utente

Proprietà CultureInfo.CurrentCulture.NumberFormat

Yes

Proprietà NumberFormatInfo.CurrentInfo

Yes

Metodo CultureInfo.CreateSpecificCulture

Yes

Metodo CultureInfo.GetCultureInfo

No

Costruttore CultureInfo(String)

Yes

Costruttore CultureInfo.CultureInfo(String, Boolean)

Dipende dal valore del parametro useUserOverride

A meno che non ci siano valide motivazioni di fare in caso contrario, è necessario soddisfare gli override dell'utente quando si utilizza l'oggetto NumberFormatInfo nelle applicazioni client per formattare e analizzare l'input dell'utente o per visualizzare i dati numerici. Per le applicazioni server o le applicazioni automatiche, non è necessario soddisfare gli override dell'utente. Tuttavia, se si utilizza l'oggetto NumberFormatInfo o in modo esplicito o implicito per mantenere le informazioni numeriche in formato stringa, è possibile utilizzare un oggetto NumberFormatInfo che riflette le convenzioni di formattazione delle impostazioni cultura invarianti, o è necessario specificare una stringa di formato numerica personalizzata utilizzata indipendentemente dalle impostazioni cultura.

IFormatProvider, NumberFormatInfo e formattazione numerica

Un oggetto NumberFormatInfo viene utilizzato in modo implicito o esplicito in tutte le operazioni di formattazione numerica. Queste includono chiamate ai seguenti metodi:

Tutte le operazioni di formattazione numerica che utilizzano un'implementazione IFormatProvider. L'interfaccia IFormatProvider comprende un solo metodo, GetFormat(Type). A questo metodo di callback viene passato un oggetto Type che rappresenta il tipo richiesto per fornire informazioni sulla formattazione. Il metodo è responsabile della restituzione di uno un'istanza di quel tipo o null, se non può fornire un'istanza del tipo. .NET Framework fornisce due implementazioni IFormatProvider per formattare numeri:

  • La classe CultureInfo, che rappresenta le impostazioni cultura specifiche (o uno specifico linguaggio in una specifica regione/paese). In un'operazione di formattazione numerica, il metodo CultureInfo.GetFormat restituisce l'oggetto NumberFormatInfo associato alla proprietà CultureInfo.NumberFormat.

  • La classe NumberFormatInfo, che fornisce informazioni sulle convenzioni di formattazione delle impostazioni cultura collegate. Il metodo NumberFormatInfo.GetFormat relativo restituisce un'istanza di se stesso.

Se un'implementazione di IFormatProvider non viene fornita ad un metodo di formattazione in modo esplicito, viene utilizzato un oggetto CultureInfo restituito dalla proprietà CultureInfo.CurrentCulture che rappresenta le impostazioni cultura della thread corrente.

Nell'esempio seguente viene illustrata la relazione tra l'interfaccia IFormatProvider e NumberFormatInfo nelle operazioni di formattazione definite nell'implementazione personalizzata IFormatProvider. Il metodo GetFormat visualizza il nome del tipo di oggetto richiesto dall'operazione di formattazione. Se viene richiesta un'interfaccia un oggetto NumberFormatInfo, il metodo fornisce l'oggetto NumberFormatInfo per le impostazioni cultura della thread corrente. Come mostra l'output dell'esempio, il metodo Decimal.ToString(IFormatProvider) richiede un oggetto NumberFormatInfo per fornire informazioni sulla formattazione, mentre il metodo NumberFormatInfo richiede String.Format(IFormatProvider, String, Object[]) e oggetti DateTimeFormatInfo come implementazione di ICustomFormatter.


using System;
using System.Globalization;

public class CurrentCultureFormatProvider : IFormatProvider
{
   public Object GetFormat(Type formatType) 
   {
      Console.WriteLine("Requesting an object of type {0}", 
                        formatType.Name);
      if (formatType == typeof(NumberFormatInfo))
         return NumberFormatInfo.CurrentInfo;
      else if (formatType == typeof(DateTimeFormatInfo))
         return DateTimeFormatInfo.CurrentInfo;
      else
         return null;
   }
}

public class Example
{
   public static void Main()
   {
      Decimal amount = 1203.541m;
      string value = amount.ToString("C2", new CurrentCultureFormatProvider());
      Console.WriteLine(value);
      Console.WriteLine();
      string composite = String.Format(new CurrentCultureFormatProvider(), 
                                       "Date: {0}   Amount: {1}   Description: {2}",
                                       DateTime.Now, 1264.03m, "Service Charge");
      Console.WriteLine(composite);
      Console.WriteLine();
   }
}
// The example displays output like the following:
//    Requesting an object of type NumberFormatInfo
//    $1,203.54
//    
//    Requesting an object of type ICustomFormatter
//    Requesting an object of type DateTimeFormatInfo
//    Requesting an object of type NumberFormatInfo
//    Date: 11/15/2012 2:00:01 PM   Amount: 1264.03   Description: Service Charge


Se l'implementazione IFormatProvider in modo esplicito non è disponibile in una chiamata al metodo di formattazione numerica, il metodo chiama il metodo CultureInfo.CurrentCulture.GetFormat, che restituisce l'oggetto NumberFormatInfo corrispondente alle impostazioni cultura della thread corrente.

Proprietà NumberFormatInfo e delle stringhe di formato

Ogni operazione di formattazione utilizzata una stringa di formato numerico standard o personalizzata per scrivere una stringa risultato da un numero. In alcuni casi, l'utilizzo di una stringa di formato produce una stringa risultato esplicita, come nell'esempio seguente. Questo codice chiama il metodo Decimal.ToString(IFormatProvider) per convertire un valore Decimal in diverse rappresentazioni di stringa utilizzando le convenzioni di formattazione delle impostazioni cultura en-US.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] formatStrings = { "C2", "E1", "F", "G3", "N", 
                                 "#,##0.000", "0,000,000,000.0##" };
      CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
      Decimal[] values = { 1345.6538m, 1921651.16m };

      foreach (var value in values) {
         foreach (var formatString in formatStrings) {
            string resultString = value.ToString(formatString, culture);
            Console.WriteLine("{0,-18} -->  {1}", formatString, resultString);
         }
         Console.WriteLine();      
      }   
   }
}
// The example displays the following output:
//       C2                 -->  $1,345.65
//       E1                 -->  1.3E+003
//       F                  -->  1345.65
//       G3                 -->  1.35E+03
//       N                  -->  1,345.65
//       #,##0.000          -->  1,345.654
//       0,000,000,000.0##  -->  0,000,001,345.654
//       
//       C2                 -->  $1,921,651.16
//       E1                 -->  1.9E+006
//       F                  -->  1921651.16
//       G3                 -->  1.92E+06
//       N                  -->  1,921,651.16
//       #,##0.000          -->  1,921,651.160
//       0,000,000,000.0##  -->  0,001,921,651.16


In altri casi, è implicito l'utilizzo di una stringa di formato. Ad esempio, nelle chiamate al metodo per impostazione predefinita o al metodo senza parametri Decimal.ToString(), il valore dell'istanza Decimal viene formattato utilizzando l'identificatore di formato generale ("G") e le convenzioni delle impostazioni cultura correnti, che in questo caso sono le impostazioni cultura en-US.


using System;

public class Example
{
   public static void Main()
   {
      Decimal[] values = { 1345.6538m, 1921651.16m };

      foreach (var value in values) {
         string resultString = value.ToString();
         Console.WriteLine(resultString);
         Console.WriteLine();      
      }   
   }
}
// The example displays the following output:
//       1345.6538
//       
//       1921651.16


Ogni stringa di formato numerico standard utilizza una o più proprietà NumberFormatInfo per determinare il modello o i simboli utilizzati nella stringa risultato. Analogamente, ogni identificatore di formato numerico personalizzato, tranne i simboli di inserimento nella stringa risultato "0 " e "#", sono definiti dalle proprietà NumberFormatInfo. Nella tabella seguente sono elencati gli identificatori di formato numerico personalizzati e standard e le proprietà collegate NumberFormatInfo. Per modificare l'aspetto della stringa di risultato per le impostazioni cultura, vedere la sezione Modificare le proprietà NumberFormatInfo. Per ulteriori informazioni sull'utilizzo degli identificatori di formato, vedere Stringhe di formato numerico standard e Stringhe di formato numerico personalizzate.

Identificatore di formato

Proprietà associate

"C" or "c" (Identificatore di formato di valuta)

CurrencyDecimalDigits , per definire il numero predefinito di cifre frazionarie.

CurrencyDecimalSeparator , per definire il simbolo di separatore decimale.

CurrencyGroupSeparator , per definire il gruppo o il separatore delle migliaia.

CurrencyGroupSizes , per definire le dimensioni dei gruppi integrali.

CurrencyNegativePattern , per definire il modello dei valori di valuta negativi.

CurrencyPositivePattern , per definire il modello dei valori di valuta positivi.

CurrencySymbol , per definire il simbolo di valuta.

NegativeSign , per definire il simbolo di segno negativo.

"D" or "d" (Identificatore di formato decimale)

NegativeSign , per definire il simbolo di segno negativo.

"E" o "e" (identificatore di formato esponenziale o scientifico)

NegativeSign , per definire il simbolo di segno negativo nella mantissa e nell'esponente.

NumberDecimalSeparator , per definire il simbolo di separatore decimale.

PositiveSign , per definire il simbolo positivo dell'esponente.

"F" or "f" (Identificatore di formato a virgola fissa)

NegativeSign , per definire il simbolo di segno negativo.

NumberDecimalDigits , per definire il numero predefinito di cifre frazionarie.

NumberDecimalSeparator , per definire il simbolo di separatore decimale.

"G" or "g" (Identificatore di formato generale)

NegativeSign , per definire il simbolo di segno negativo.

NumberDecimalSeparator , per definire il simbolo di separatore decimale.

PositiveSign , per definire il simbolo di segno positivo per le stringhe risultato in formato esponenziale.

"N" o "n" (identificatore di formato numerico)

NegativeSign , per definire il simbolo di segno negativo.

NumberDecimalDigits , per definire il numero predefinito di cifre frazionarie.

NumberDecimalSeparator , per definire il simbolo di separatore decimale.

NumberGroupSeparator , per definire il simbolo separatore del gruppo (migliaia).

NumberGroupSizes , per definire il numero di cifre integrali in un gruppo.

NumberNegativePattern , per definire il formato dei valori negativi.

"P" or "p" (Identificatore di formato percentuale)

NegativeSign , per definire il simbolo di segno negativo.

PercentDecimalDigits , per definire il numero predefinito di cifre frazionarie.

PercentDecimalSeparator , per definire il simbolo di separatore decimale.

PercentGroupSeparator , per definire il simbolo separatore del gruppo decimale.

PercentGroupSizes , per definire il numero di cifre integrali in un gruppo.

PercentNegativePattern , per definire la posizione del simbolo di percentuale e del simbolo negativo per i valori negativi.

PercentPositivePattern , per definire la posizione del simbolo di percentuale per i valori positivi.

PercentSymbol , per definire il simbolo di percentuale.

"R" or "r" (Identificatore di formato di round trip)

NegativeSign , per definire il simbolo di segno negativo.

NumberDecimalSeparator , per definire il simbolo di separatore decimale.

PositiveSign , per definire il simbolo positivo di un esponente.

"X" or "x" (Identificatore di formato esadecimale)

Nessuno.

"." (identificatore di formato personalizzato del separatore decimale)

NumberDecimalSeparator , per definire il simbolo di separatore decimale.

"," (identificatore di formato personalizzato del separatore di gruppi)

NumberGroupSeparator , per definire il simbolo separatore del gruppo (migliaia).

"%" (identificatore di formato segnaposto personalizzato percentuale)

PercentSymbol , per definire il simbolo di percentuale.

"‰" (identificatore di formato segnaposto personalizzato per mille)

PerMilleSymbol , per definire i simboli per mille.

"E" (identificatore di formato personalizzato per la notazione esponenziale)

NegativeSign , per definire il simbolo di segno negativo nella mantissa e nell'esponente.

PositiveSign , per definire il simbolo positivo dell'esponente.

Si noti che la classe NumberFormatInfo include una proprietà NativeDigits che specifica le 10 cifre di base utilizzate dalle impostazioni cultura specifiche. Tuttavia, la proprietà non viene utilizzata nelle operazioni di formattazione; solo le cifre latine di base da 0 (U+0030) a 9 (U+0039) sono utilizzate nella stringa risultato. Inoltre, per Single e valori Double di NaN, PositiveInfinity e NegativeInfinity, la stringa risultato è costituita esclusivamente da simboli definiti da NaNSymbol, PositiveInfinitySymbol e rispettivamente da proprietà NegativeInfinitySymbol.

Modifica delle proprietà NumberFormatInfo

È possibile modificare le proprietà di un oggetto NumberFormatInfo per personalizzare la stringa risultato prodotta da un'operazione di formattazione numerica. Per eseguire questa operazione, seguire la procedura seguente:

  1. Creare una copia lettura/scrittura di un oggetto NumberFormatInfo delle convenzioni di formattazione che si desidera modificare. Per ulteriori informazioni, vedere la sezione Creare un'istanza di un oggetto di NumberFormatInfo.

  2. Impostare la proprietà o le proprietà utilizzate per produrre la stringa di risultato desiderata. Per informazioni su come i metodi di formattazione utilizzano le proprietà NumberFormatInfo per definire le stringhe di risultato, vedere Proprietà NumberFormatInfo e delle stringhe di formato.

  3. Utilizzare l'oggetto NumberFormatInfo come argomento di IFormatProvider nelle chiamate ai metodi di formattazione.

NotaNota

Invece di modificare dinamicamente valori delle proprietà delle impostazioni cultura, ogni volta che un'applicazione viene avviata, è possibile utilizzare la classe CultureAndRegionInfoBuilder per definire le impostazioni cultura personalizzate (impostazioni cultura che hanno un nome univoco e completano le impostazioni cultura esistenti) o le impostazioni cultura sostitutive (quella che vengono utilizzate al posto delle impostazioni cultura specifiche).

Nelle sezioni seguenti vengono forniti alcuni esempi.

2xdwt6xx.collapse_all(it-it,VS.110).gifModificare il simbolo di valuta e il modello

Nell'esempio seguente viene modificato un oggetto NumberFormatInfo che rappresenta le convenzioni di formattazione delle impostazioni cultura en-US. Assegna il simbolo di valuta ISO-4217 alla proprietà CurrencySymbol e definisce un modello per i valori di valuta costituito dal simbolo di valuta seguito da uno spazio e da un valore numerico.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Retrieve a writable NumberFormatInfo object.
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      NumberFormatInfo nfi = enUS.NumberFormat;

      // Use the ISO currency symbol instead of the native currency symbol.
      nfi.CurrencySymbol =  (new RegionInfo(enUS.Name)).ISOCurrencySymbol;
      // Change the positive currency pattern to <code><space><value>.
      nfi.CurrencyPositivePattern = 2;
      // Change the negative currency pattern to <code><space><sign><value>.     
      nfi.CurrencyNegativePattern = 12;

      // Produce the result strings by calling ToString.
      Decimal[] values = { 1065.23m, 19.89m, -.03m, -175902.32m };
      foreach (var value in values)
         Console.WriteLine(value.ToString("C", enUS));

      Console.WriteLine();

      // Produce the result strings by calling a composite formatting method.
      foreach (var value in values)
         Console.WriteLine(String.Format(enUS, "{0:C}", value));      
   }
}
// The example displays the following output:
//       USD 1,065.23
//       USD 19.89
//       USD -0.03
//       USD -175,902.32
//       
//       USD 1,065.23
//       USD 19.89
//       USD -0.03
//       USD -175,902.32


2xdwt6xx.collapse_all(it-it,VS.110).gifFormattare un numero nazionale di identificazione

Molti numeri di identificazione nazionale sono costituiti esclusivamente dalle cifre e pertanto possono essere formattati modificando le proprietà di un oggetto NumberFormatInfo. Ad esempio, un numero di previdenza sociale negli Stati Uniti è composto da 9 cifre disposte nel modo seguente: XXX-XX-XXXX. Nell'esempio seguente si presuppone che i numeri di previdenza sociale siano archiviati come valori Integer e vengono formattati in modo appropriato.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Instantiate a read-only NumberFormatInfo object.
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      NumberFormatInfo nfi = enUS.NumberFormat;

      // Modify the relevant properties.
      nfi.NumberGroupSeparator = "-";
      nfi.NumberGroupSizes = new int[] { 3, 2, 4};
      nfi.NumberDecimalDigits = 0;

      int[] ids = { 111223333, 999776666 };

      // Produce the result string by calling ToString.
      foreach (var id in ids)
         Console.WriteLine(id.ToString("N", enUS));

      Console.WriteLine();

      // Produce the result string using composite formatting.
      foreach (var id in ids)
         Console.WriteLine(String.Format(enUS, "{0:N}", id));
   }
}
// The example displays the following output:
//       1112-23-333
//       9997-76-666
//       
//       1112-23-333
//       9997-76-666


Analisi delle stringhe numeriche

L'Analisi comporta una conversione della stringa di rappresentazione di un numero in un numero. Ogni tipo numerico in .NET Framework include due metodi di analisi sottoposti a overload: Parse e TryParse. Il metodo Parse converte una stringa in un numero e genera un'eccezione se la conversione non riesce. Il metodo TryParse converte una stringa in un numero, assegna un numero a un argomento out e restituisce un valore Boolean che indica se la conversione ha avuto esito positivo.

I metodi di analisi in modo implicito o esplicito utilizzano un valore di enumerazione NumberStyles per determinare quali elementi di stile (come separatori di gruppi, un separatore decimale, o un simbolo di valuta) possono essere presenti in una stringa se l'operazione di analisi è riuscita. Se il valore NumberStyles non viene fornito nella chiamata al metodo, l'impostazione predefinita è un valore NumberStyles che include il Float e il flag AllowThousands, il quale specifica che la stringa analizzata può includere simboli del gruppo, un separatore decimale, un segno negativo e spazi vuoti, oppure può essere la rappresentazione di una stringa di un numero in notazione esponenziale.

I metodi di analisi anche in modo implicito o esplicito utilizzano un oggetto NumberFormatInfo che definisce i simboli e i modelli specifici che possono verificarsi nella stringa da analizzare. Se un oggetto NumberFormatInfo non viene fornito, l'impostazione predefinita è NumberFormatInfo per le impostazioni cultura della thread corrente. Per ulteriori informazioni sull'analisi, vedere i diversi metodi di analisi, come Int16.Parse(String), Int32.Parse(String, NumberStyles), Int64.Parse(String, IFormatProvider), Decimal.Parse(String, NumberStyles, IFormatProvider), Double.TryParse(String, Double) e BigInteger.TryParse(String, NumberStyles, IFormatProvider, BigInteger).

Nell'esempio seguente viene illustrata il carattere dipendente dalle impostazioni cultura di una stringa analizzata. Tenta di analizzare una stringa che include i divisori delle migliaia utilizzando le convenzioni di en-US, fr-FR e delle convenzioni delle impostazioni cultura invarianti. Una stringa che include la virgola come separatore di gruppi e l'ora come separatore decimale non riesce ad analizzare le impostazioni cultura fr-FR e una stringa con uno spazio come separatore di gruppi e una virgola come un separatore decimale non riesce ad analizzare le impostazioni cultura invarianti e en-US.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      String[] values = { "1,034,562.91", "9 532 978,07" };
      String[] cultureNames = { "en-US", "fr-FR", "" };

      foreach (var value in values) {
         foreach (var cultureName in cultureNames) {
            CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
            String name = culture.Name == "" ? "Invariant" : culture.Name;
            try {
               Decimal amount = Decimal.Parse(value, culture);
               Console.WriteLine("'{0}' --> {1} ({2})", value, amount, name);
            }
            catch (FormatException) {
               Console.WriteLine("'{0}': FormatException ({1})",
                                 value, name);
            }   
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       '1,034,562.91' --> 1034562.91 (en-US)
//       '1,034,562.91': FormatException (fr-FR)
//       '1,034,562.91' --> 1034562.91 (Invariant)
//       
//       '9 532 978,07': FormatException (en-US)
//       '9 532 978,07' --> 9532978.07 (fr-FR)
//       '9 532 978,07': FormatException (Invariant)


L'analisi generalmente si verifica in due contesti:

  • Come una operazione che è progettata per convertire l'input dell'utente in un valore numerico.

  • Come operazione che è progettata per eseguire una sequenza di andata e ritorno di un valore numerico; ovvero deserializzare un valore numerico che è stato precedentemente serializzato come una stringa.

Nelle sezioni seguenti vengono descritte queste due operazioni più dettagliatamente.

2xdwt6xx.collapse_all(it-it,VS.110).gifAnalisi delle stringhe utente

Quando si analizza le stringhe numeriche immesse dall'utente, è necessario creare un'istanza di un oggetto NumberFormatInfo che riflette le impostazioni relative alla lingua dell'utente. Per informazioni su come creare un'istanza di un oggetto NumberFormatInfo che riflettono le personalizzazioni dell'utente, vedere la sezione NumberFormatInfo e dati dinamici.

Nell'esempio seguente viene illustrata la differenza tra un'operazione di analisi che riflette le impostazioni relative alla lingua dell'utente e una che non lo fa. In questo caso, le impostazioni cultura predefinite del sistema sono en-US, ma l'utente ha definito "," come il simbolo decimale e "." come separatore di gruppi nel Pannello di controllo, Paese e lingua. In genere, questi simboli sono invertiti nelle impostazioni cultura predefinite en-US. Quando l'utente immette una stringa che riflette le impostazioni utente e la stringa viene analizzato da un oggetto NumberFormatInfo che riflette le impostazioni utente (override), l'operazione di analisi restituisce un risultato corretto. Tuttavia, quando la stringa viene analizzata da un oggetto NumberFormatInfo che riflette le impostazioni relative alla lingua standard en-US, confonde il simbolo della virgola per un separatore del gruppo e restituisce un risultato non corretto.


using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo stdCulture = CultureInfo.GetCultureInfo("en-US");
      CultureInfo custCulture = CultureInfo.CreateSpecificCulture("en-US"); 

      String value = "310,16";
      try {
         Console.WriteLine("{0} culture reflects user overrides: {1}", 
                           stdCulture.Name, stdCulture.UseUserOverride);
         Decimal amount = Decimal.Parse(value, stdCulture);
         Console.WriteLine("'{0}' --> {1}", value, amount.ToString(CultureInfo.InvariantCulture));                                                                                        
      }
      catch (FormatException) {
         Console.WriteLine("Unable to parse '{0}'", value);
      }    
      Console.WriteLine();

      try {
         Console.WriteLine("{0} culture reflects user overrides: {1}", 
                           custCulture.Name, custCulture.UseUserOverride);
         Decimal amount = Decimal.Parse(value, custCulture);
         Console.WriteLine("'{0}' --> {1}", value, amount.ToString(CultureInfo.InvariantCulture));                                                                                        
      }
      catch (FormatException) {
         Console.WriteLine("Unable to parse '{0}'", value);
      }   
   }
}
// The example displays the following output:
//       en-US culture reflects user overrides: False
//       '310,16' --> 31016
//       
//       en-US culture reflects user overrides: True
//       '310,16' --> 310.16


2xdwt6xx.collapse_all(it-it,VS.110).gifSerializzazione e deserializzazione dei dati numerici

Quando i dati numerici vengono serializzati in formato stringa e versioni successive sono deserializzati e analizzate, le stringhe devono essere generate e analizzate utilizzando le convenzioni delle impostazioni cultura invarianti. La formattazione e le operazioni di analisi non devono mai riflettere le convenzioni delle impostazioni cultura specifiche. Se vengono utilizzate le impostazioni specifiche delle impostazioni cultura, la portabilità dei dati è strettamente limitata; può essere deserializzata solo su una thread la quale a impostazioni specifiche delle impostazioni cultura identiche a quelle della thread in cui è stata serializzata. In alcuni casi, i dati possono non essere correttamente deserializzati nello stesso sistema nel quale sono stati serializzati.

Nell'esempio seguente viene illustrato cosa può accadere quando questo principio viene violato. I valori a virgola mobile in una matrice vengono convertiti in stringhe quando la thread corrente utilizza le impostazioni cultura specifiche delle impostazioni cultura en-US. I dati vengono analizzati da un thread che utilizza le impostazioni cultura specifiche delle impostazioni cultura en-GB. In questo caso, sebbene ogni operazione di analisi abbia esito positivo, i dati non eseguono il round-trip corretto e si verifica l'alterazione dei dati. In altri casi, un'operazione di analisi potrebbe non riuscire e FormatException potrebbe generare un'eccezione.


using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
      PersistData();

      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
      RestoreData();
   }

   private static void PersistData()
   {
      // Define an array of floating-point values.
      Double[] values = { 160325.972, 8631.16, 1.304e5, 98017554.385, 
                          8.5938287084321676e94 };
      Console.WriteLine("Original values: ");
      foreach (var value in values) 
         Console.WriteLine(value.ToString("R", CultureInfo.InvariantCulture));

      // Serialize an array of doubles to a file 
      StreamWriter sw = new StreamWriter(@".\NumericData.bin");
      for (int ctr = 0; ctr < values.Length; ctr++) {
         sw.Write(values[ctr].ToString("R"));
         if (ctr < values.Length - 1) sw.Write("|");
      }
      sw.Close();
      Console.WriteLine();
   }

   private static void RestoreData()
   {   
      // Deserialize the data
      StreamReader sr = new StreamReader(@".\NumericData.bin");
      String data = sr.ReadToEnd();
      sr.Close();

      String[] stringValues = data.Split('|');
      List<Double> newValueList = new List<Double>();

      foreach (var stringValue in stringValues) {
         try {
            newValueList.Add(Double.Parse(stringValue));
         }
         catch (FormatException) {
            newValueList.Add(Double.NaN);
         }   
      }                                   

      Console.WriteLine("Restored values:");
      foreach (var newValue in newValueList) 
         Console.WriteLine(newValue.ToString("R", NumberFormatInfo.InvariantInfo));
   }
}
// The example displays the following output:
//       Original values:
//       160325.972
//       8631.16
//       130400
//       98017554.385
//       8.5938287084321671E+94
//       
//       Restored values:
//       160325972
//       863116
//       130400
//       98017554385
//       8.5938287084321666E+110


Nell'esempio seguente viene illustrato come recuperare un oggetto NumberFormatInfo per un oggetto CultureInfo corrispondente e utilizzare l'oggetto recuperato per eseguire una query sulle informazioni di formattazione dei numeri per le impostazioni cultura specifiche.


using System;
using System.Globalization;
using System.Text;

public sealed class App 
{
    static void Main() 
    {
        StringBuilder sb = new StringBuilder();

        // Loop through all the specific cultures known to the CLR.
        foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) 
        {
            // Only show the currency symbols for cultures that speak English.
            if (ci.TwoLetterISOLanguageName != "en") continue;

            // Display the culture name and currency symbol.
            NumberFormatInfo nfi = ci.NumberFormat;
            sb.AppendFormat("The currency symbol for '{0}' is '{1}'",
                ci.DisplayName, nfi.CurrencySymbol);
            sb.AppendLine();
        }
        Console.WriteLine(sb.ToString());
    }
}

// This code produces the following output.
//
// The currency symbol for 'English (United States)' is '$'
// The currency symbol for 'English (United Kingdom)' is '�'
// The currency symbol for 'English (Australia)' is '$'
// The currency symbol for 'English (Canada)' is '$'
// The currency symbol for 'English (New Zealand)' is '$'
// The currency symbol for 'English (Ireland)' is '?'
// The currency symbol for 'English (South Africa)' is 'R'
// The currency symbol for 'English (Jamaica)' is 'J$'
// The currency symbol for 'English (Caribbean)' is '$'
// The currency symbol for 'English (Belize)' is 'BZ$'
// The currency symbol for 'English (Trinidad and Tobago)' is 'TT$'
// The currency symbol for 'English (Zimbabwe)' is 'Z$'
// The currency symbol for 'English (Republic of the Philippines)' is 'Php'


.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2015 Microsoft