Analisi delle stringhe numeriche
Aggiornamento: novembre 2007
Tutti i tipi numerici dispongono di un metodo statico Parse che consente di convertire una rappresentazione di stringa in un tipo numerico effettivo. Utilizzando questi metodi è possibile analizzare le stringhe generate mediante uno degli identificatori di formato descritti in Stringhe di formato numerico.
I caratteri utilizzati per la rappresentazione dei simboli di valuta, dei separatori delle migliaia e dei separatori decimali sono definiti nei provider di formato. Il metodo Parse accetta i provider di formato, consentendo di specificare e analizzare in modo esplicito le stringhe specifiche delle impostazioni cultura. Se non viene specificato alcun provider di formato, viene utilizzato il provider associato al thread corrente. Per ulteriori informazioni, vedere Cenni preliminari sulla formattazione.
Nell'esempio di codice seguente una stringa viene convertita in un valore integer, il valore viene incrementato e il risultato viene visualizzato.
Dim MyString As String = "12345"
Dim MyInt As Integer = Integer.Parse(MyString)
MyInt += 1
Console.WriteLine(MyInt)
' The result is "12346".
string MyString = "12345";
int MyInt = int.Parse(MyString);
MyInt++;
Console.WriteLine(MyInt);
// The result is "12346".
L'enumerazione NumberStyles indica il formato consentito di una stringa da analizzare. È possibile utilizzare questa enumerazione per analizzare una stringa contenente un simbolo di valuta, un separatore decimale, un esponente, alcune parentesi e così via. Nelle impostazioni cultura en-US, ad esempio, non è possibile convertire una stringa contenente una virgola in un valore integer mediante il metodo Parse se non viene passata l'enumerazione NumberStyles.AllowThousands.
NumberStyles.AllowCurrencySymbol specifica che un numero deve essere analizzato come valuta anziché come numero decimale. NumberStyles.AllowDecimalPoint indica che è consentito un separatore decimale. I caratteri validi per i separatori decimali sono determinati dalle proprietà NumberDecimalSeparator o CurrencyDecimalSeparator dell'oggetto NumberFormatInfo corrente. NumberStyles.AllowThousands indica che sono consentiti i separatori di gruppo. I caratteri validi per i separatori di gruppo sono determinati dalle proprietà NumberGroupSeparator o CurrencyGroupSeparator dell'oggetto NumberFormatInfo corrente. Per una tabella completa dei tipi di caratteri non numerici validi, consultare la documentazione relativa all'enumerazione NumberStyles.
Per semplificare l'analisi, l'enumerazione NumberStyles utilizza i caratteri specificati dalle impostazioni cultura correnti. Se non vengono specificate impostazioni cultura passando un oggetto CultureInfo per cui sono specificate impostazioni cultura corrispondenti alla stringa che si sta analizzando, verranno utilizzate le impostazioni cultura associate al thread corrente.
L'esempio di codice seguente non è valido e genererà un'eccezione. In questo esempio viene illustrata la modalità non corretta per eseguire l'analisi di una stringa contenente caratteri non numerici. Viene dapprima creato un nuovo CultureInfo, che viene passato al metodo Parse per specificare che per l'analisi verranno utilizzate le impostazioni cultura en-US.
Imports System.Globalization
Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
Dim MyString As String = "123,456"
Dim MyInt As Integer = Integer.Parse(MyString, MyCultureInfo)
Console.WriteLine(MyInt)
' Raises System.Format exception.
using System.Globalization;
CultureInfo MyCultureInfo = new CultureInfo("en-US");
string MyString = "123,456";
int MyInt = int.Parse(MyString, MyCultureInfo);
Console.WriteLine(MyInt);
// Raises System.Format exception.
Quando viene applicata l'enumerazione NumberStyles con il flag AllowThousands, il metodo Parse ignora la virgola che nell'esempio precedente ha generato l'eccezione. Nell'esempio di codice seguente, viene utilizzata la stessa stringa dell'esempio precedente, ma in questo caso non viene generata l'eccezione. Come nell'esempio precedente, viene innanzitutto creato un nuovo CultureInfo che viene passato al metodo Parse per specificare che l'analisi verrà effettuata utilizzando il separatore delle migliaia delle impostazioni cultura en-US.
Imports System.Globalization
Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
Dim MyString As String = "123,456"
Dim MyInt As Integer = Integer.Parse(MyString, NumberStyles.AllowThousands, MyCultureInfo)
Console.WriteLine(MyInt)
' The result is "123456".
using System.Globalization;
CultureInfo MyCultureInfo = new CultureInfo("en-US");
string MyString = "123,456";
int MyInt = int.Parse(MyString, NumberStyles.AllowThousands, MyCultureInfo);
Console.WriteLine(MyInt);
// The result is "123456".