Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa pagina della Guida illustra in che modo Visual Basic usa le informazioni culturali per eseguire conversioni e confronti di stringhe.
Quando usare stringhe di Culture-Specific
In genere, è opportuno usare stringhe specifiche della cultura per tutti i dati presentati e letti dagli utenti e usare stringhe invarianti culturali per i dati interni dell'applicazione.
Ad esempio, se l'applicazione chiede agli utenti di inserire una data come stringa, essi dovrebbero formattare le stringhe secondo la loro cultura, e l'applicazione dovrebbe convertire la stringa di conseguenza. Se l'applicazione presenta tale data nell'interfaccia utente, deve presentarla nella cultura dell'utente.
Tuttavia, se l'applicazione carica la data in un server centrale, deve formattare la stringa in base a impostazioni cultura specifiche, per evitare confusione tra formati di data potenzialmente diversi.
Funzioni Culture-Sensitive
Tutte le funzioni di conversione delle stringhe di Visual Basic ad eccezione delle funzioni Str
e Val
, usano le informazioni di cultura dell'applicazione per assicurarsi che le conversioni e i confronti siano appropriate per la cultura dell'utente dell'applicazione.
La chiave per usare correttamente le funzioni di conversione delle stringhe nelle applicazioni eseguite su computer con diverse impostazioni cultura consiste nel comprendere quali funzioni usano un'impostazione cultura specifica e quali usano l'impostazione cultura corrente. Si noti che le impostazioni cultura dell'applicazione sono, per impostazione predefinita, ereditate dalle impostazioni cultura del sistema operativo. Per ulteriori informazioni, vedere Asc, AscW, Chr, ChrW, Format, Hex, Oct e Funzioni di conversione di tipi.
Le Str
funzioni (converte i numeri in stringhe) e Val
(converte le stringhe in numeri) non usano le informazioni sulle impostazioni cultura dell'applicazione durante la conversione tra stringhe e numeri. Riconoscono però solo il punto (.) come separatore decimale valido. Gli analoghi con riconoscimento culturale di queste funzioni sono:
Conversioni che usano la cultura attuale. Le
CStr
funzioni eFormat
converte un numero in una stringa e leCDbl
funzioni eCInt
converteno una stringa in un numero.Conversioni che usano impostazioni culturali specifiche. Ogni oggetto number ha un
ToString(IFormatProvider)
metodo che converte un numero in una stringa e unParse(String, IFormatProvider)
metodo che converte una stringa in un numero. Ad esempio, ilDouble
tipo fornisce i ToString(IFormatProvider) metodi e Parse(String, IFormatProvider) .
Per altre informazioni, vedere Str e Val.
Uso di una cultura specifica
Si supponga di sviluppare un'applicazione che invia una data (formattata come stringa) a un servizio Web. In questo caso, l'applicazione deve usare una cultura specifica per la conversione di stringa. Per illustrare il motivo, considerare il risultato dell'utilizzo del metodo della data ToString(): se l'applicazione usa tale metodo per formattare la data del 4 luglio 2005, restituisce "7/4/2005 12:00:00 AM" quando viene eseguito con le impostazioni cultura inglese statunitense (en-US), ma restituisce "04.07.2005 00:00:00" quando viene eseguito con le impostazioni cultura tedesca (de-DE).
Quando è necessario eseguire una conversione di stringa in un formato di impostazioni cultura specifico, è necessario usare la classe CultureInfo
incorporata nel .NET Framework. È possibile creare un nuovo oggetto CultureInfo
per una cultura specifica passando il nome della cultura al costruttore CultureInfo. I nomi delle culture supportate sono elencati nella pagina di aiuto della classe CultureInfo.
In alternativa, è possibile ottenere un'istanza della cultura invariante tramite la proprietà CultureInfo.InvariantCulture. La cultura invariante si basa sulla cultura inglese, ma esistono alcune differenze. Ad esempio, la cultura invariante specifica un orologio di 24 ore invece di un orologio di 12 ore.
Per convertire una data in una stringa culturale, passare l'oggetto CultureInfo al metodo ToString(IFormatProvider) dell'oggetto data. Ad esempio, il codice seguente visualizza "07/04/2005 00:00:00", indipendentemente dalle impostazioni cultura dell'applicazione.
Dim d As Date = #7/4/2005#
MsgBox(d.ToString(System.Globalization.CultureInfo.InvariantCulture))
Annotazioni
I valori letterali data vengono sempre interpretati secondo la cultura inglese.
Confronto di stringhe
Esistono due situazioni importanti in cui sono necessari confronti tra stringhe:
Ordinamento dei dati da visualizzare all'utente. Usare operazioni basate sulle impostazioni culturali correnti affinché le stringhe siano ordinate correttamente.
Determinare se due stringhe interne dell'applicazione corrispondono esattamente (in genere per scopi di sicurezza). Usare operazioni che ignorano le impostazioni culturali correnti.
È possibile eseguire entrambi i tipi di confronto con la funzione Visual Basic StrComp . Specificare l'argomento facoltativo Compare
per controllare il tipo di confronto: Text
per la maggior parte dell'input e dell'output Binary
per determinare corrispondenze esatte.
La StrComp
funzione restituisce un numero intero che indica la relazione tra le due stringhe confrontate in base all'ordinamento. Un valore positivo per il risultato indica che la prima stringa è maggiore della seconda stringa. Un risultato negativo indica che la prima stringa è più piccola e zero indica l'uguaglianza tra le stringhe.
' Defines variables.
Dim testStr1 As String = "ABCD"
Dim testStr2 As String = "abcd"
Dim testComp As Integer
' The two strings sort equally. Returns 0.
testComp = StrComp(testStr1, testStr2, CompareMethod.Text)
' testStr1 sorts before testStr2. Returns -1.
testComp = StrComp(testStr1, testStr2, CompareMethod.Binary)
' testStr2 sorts after testStr1. Returns 1.
testComp = StrComp(testStr2, testStr1, CompareMethod.Binary)
È anche possibile usare il partner .NET Framework della StrComp
funzione , ovvero il String.Compare metodo . Si tratta di un metodo statico e sovraccarico della classe base di stringa. Nell'esempio seguente viene illustrato come viene usato questo metodo:
Dim myString As String = "Alphabetical"
Dim secondString As String = "Order"
Dim result As Integer
result = String.Compare(myString, secondString)
Per un controllo più dettagliato sul modo in cui vengono eseguiti i confronti, è possibile usare sovraccarichi aggiuntivi del metodo Compare. Con il String.Compare metodo è possibile usare l'argomento comparisonType
per specificare il tipo di confronto da usare.
Valore dell'argomento comparisonType |
Tipo di confronto | Quando utilizzare |
---|---|---|
Ordinal |
Confronto basato sui byte dei componenti delle stringhe. | Usare questo valore durante il confronto: identificatori con distinzione tra maiuscole e minuscole, impostazioni correlate alla sicurezza o altri identificatori non linguistici in cui i byte devono corrispondere esattamente. |
OrdinalIgnoreCase |
Confronto basato sui byte dei componenti delle stringhe.OrdinalIgnoreCase utilizza le informazioni sulla cultura invariante per determinare quando due caratteri differiscono solo per la maiuscola. |
Usa questo valore durante il confronto: identificatori senza distinzione tra maiuscole e minuscole, impostazioni correlate alla sicurezza e dati archiviati in Windows. |
CurrentCulture o CurrentCultureIgnoreCase |
Confronto basato sull'interpretazione delle stringhe nella cultura attuale. | Usare questi valori durante il confronto: i dati visualizzati all'utente, la maggior parte dell'input dell'utente e altri dati che richiedono l'interpretazione linguistica. |
InvariantCulture o InvariantCultureIgnoreCase |
Confronto basato sull'interpretazione delle stringhe nella cultura invariata. Questo valore è diverso da Ordinal e OrdinalIgnoreCase , perché la cultura invariante considera i caratteri al di fuori della gamma accettabile come caratteri invarianti equivalenti. |
Usare questi valori solo quando si confrontano dati persistenti o si visualizzano dati linguistici pertinenti che richiedono un ordinamento fisso. |
Considerazioni sulla sicurezza
Se l'applicazione prende decisioni di sicurezza in base al risultato di un confronto o di un'operazione di modifica del caso, l'operazione deve usare il String.Compare metodo e passare Ordinal
o OrdinalIgnoreCase
per l'argomento comparisonType
.