Come dovrei trasmettere in VB.NET?
Domanda
Sono tutti uguali?In quali circostanze dovrei sceglierne uno rispetto agli altri?
var.ToString()
CStr(var)
CType(var, String)
DirectCast(var, String)
MODIFICARE:Suggerimento da Non me stesso…
- TryCast(var, String)
Soluzione
Sono tutti leggermente diversi e generalmente hanno un utilizzo accettabile.
var.
ToString
()
ti darà la rappresentazione di stringa di un oggetto, indipendentemente dal tipo.Usa questo sevar
non è già una stringa.CStr
(var)
è l'operatore di cast di stringhe VB.Non sono un tipo VB, quindi suggerirei di evitarlo, ma non farà davvero male a nulla.Penso che sia fondamentalmente lo stesso diCType
.CType
(var, String)
convertirà il tipo specificato in una stringa, utilizzando qualsiasi operatore di conversione fornito.DirectCast
(var, String)
viene utilizzato per eseguire l'upcast di un oggetto in una stringa.Se sai che una variabile oggetto è, in effetti, una stringa, usa questo.Questo è lo stesso di(string)var
in C#.TryCast
(come menzionato da @Non me stesso) è comeDirectCast
, ma torneràNothing
se la variabile non può essere convertita in una stringa, anziché generare un'eccezione.Questo è lo stesso divar as string
in C#.ILTryCast
anche la pagina su MSDN ha un buon confronto.
Altri suggerimenti
Cstr()
è compilato in linea per prestazioni migliori.
CType
consente cast tra tipi se è definito un operatore di conversione
ToString()
Tra il tipo base e la stringa viene generata un'eccezione se la conversione non è possibile.
TryParse()
Dalla corda alla base typeif
possibile altrimenti restituisce falso
DirectCast
utilizzato se i tipi sono correlati tramite ereditarietà o condividono un'interfaccia comune, genererà un'eccezione se il cast non è possibile, trycast
non restituirà nulla in questo caso
Preferisco la seguente sintassi:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
Ah, puoi dire che in genere scrivo codice in C#.8)
Il motivo per cui preferisco TryCast è che non devi preoccuparti del sovraccarico derivante dal casting delle eccezioni.Il tuo cast ha successo oppure la tua variabile viene inizializzata su null e lo gestisci di conseguenza.
MSDN sembra indicare che i cast Cxxx per tipi specifici possono migliorare le prestazioni in VB .NET perché vengono convertiti in codice inline.Per qualche ragione, suggerisce anche DirectCast al contrario di CType in alcuni casi (la documentazione afferma che è quando esiste una relazione di ereditarietà;Credo che ciò significhi che la sanità del cast viene controllata in fase di compilazione e che è possibile applicare ottimizzazioni mentre CType utilizza sempre il runtime VB.)
Quando scrivo codice VB .NET, ciò che utilizzo dipende da cosa sto facendo.Se è un codice prototipo che intendo buttare via, utilizzo qualunque cosa mi capiti di digitare.Se si tratta di un codice serio, provo a utilizzare un cast Cxxx.Se non ne esiste uno, utilizzo DirectCast se ho una ragionevole convinzione che esista una relazione di ereditarietà.Se si tratta di una situazione in cui non ho idea se il cast dovrebbe avere successo (input dell'utente -> numeri interi, ad esempio), allora utilizzo TryCast in modo da fare qualcosa di più amichevole che lanciare un'eccezione all'utente.
Una cosa che non riesco a scuotere è che tendo a usare ToString invece di CStr ma presumibilmente Cstr è più veloce.
Secondo l'esame di certificazione dovresti utilizzare Convert.ToXXX() quando possibile per conversioni semplici perché ottimizza le prestazioni meglio delle conversioni CXXX.
Un tempo, ricordo di aver visto lo stato della libreria MSDN per utilizzare CStr() perché era più veloce.Non so se questo sia vero però.