Sono tutti uguali? In quali circostanze dovrei scegliere ciascuno rispetto agli altri?
var.ToString ()
CStr (Var)
CType (var, String)
DirectCast (var, String)
EDIT: Suggerimento da NotMyself ...
- TryCast (var, String)
Sono tutti uguali? In quali circostanze dovrei scegliere ciascuno rispetto agli altri?
var.ToString ()
CStr (Var)
CType (var, String)
DirectCast (var, String)
EDIT: Suggerimento da NotMyself ...
Risposte:
Sono tutti leggermente diversi e generalmente hanno un uso accettabile.
var.
ToString
()
ti darà la rappresentazione in forma di stringa di un oggetto, indipendentemente dal tipo. Usalo se var
non è già una stringa.CStr
(var)
è l'operatore di cast della stringa VB. Non sono un ragazzo VB, quindi suggerirei di evitarlo, ma non farà davvero del male a nulla. Penso che sia sostanzialmente lo stesso di CType
.CType
(var, String)
convertirà il tipo specificato in una stringa, utilizzando tutti gli operatori di conversione forniti.DirectCast
(var, String)
viene utilizzato per eseguire l'upgrade di un oggetto in una stringa. Se sai che una variabile oggetto è, in effetti, una stringa, usa questa. Questo è lo stesso (string)var
di C #.TryCast
(come indicato da @ NotMyself ) è simile DirectCast
, ma verrà restituito Nothing
se la variabile non può essere convertita in una stringa, anziché generare un'eccezione. Questo è lo stesso var as string
di C #. Anche la TryCast
pagina su MSDN ha un buon confronto.TryCast
funziona solo per i tipi di valore, poiché deve essere un tipo che può avere Nothing
come valore
CStr(var)
soffocerà e genererà un'eccezione se var è DBNull.Value, ma l'alternativa Convert.ToString(var)
restituirà una stringa vuota.
Dim myList AS ArrayList=new ArrayList
Quando scrivi (From e In myList select CType(e.Name,String)).ToArray()
non funziona. Sono venuto a scrivere ... select CType(e.Name.ToString,String)).ToArray()
e ho recuperato il mio sorriso.
Cstr()
è compilato in linea per prestazioni migliori.
CType
consente il cast tra tipi se è definito un operatore di conversione
ToString()
Tra tipo base e stringa genera un'eccezione se la conversione non è possibile.
TryParse()
Da String a base typeif
possibile altrimenti restituisce false
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 questa istanza
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 in contrapposizione a CType in alcuni casi (la documentazione afferma che è quando c'è una relazione di ereditarietà; credo che ciò significhi che la sanità mentale del cast sia controllata al momento della compilazione e che le ottimizzazioni possano essere applicate mentre CType usa sempre il Runtime VB.)
Quando scrivo il codice VB .NET, ciò che uso dipende da ciò che sto facendo. Se è il prototipo del codice che sto per buttare via, uso qualunque cosa mi capiti di scrivere. Se è il codice di cui sto seriamente, provo a usare un cast Cxxx. Se uno non esiste, utilizzo DirectCast se ho la ragionevole convinzione che esista una relazione ereditaria. Se è una situazione in cui non ho idea del successo del cast (input dell'utente -> numeri interi, per esempio), allora uso 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.
Preferisco la sintassi seguente:
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 fare confusione con le spese generali di trasmissione delle eccezioni. Il tuo cast ha esito positivo o la variabile viene inizializzata su null e la gestisci di conseguenza.
.ToString()
. Un tipo di valore, come Integer, non può essere Nothing. Quindi, in questo caso, CStr (numero) o number.ToString () è sicuro. Nel caso generale (non solo i tipi di valore), CStr (qualunque cosa) è sicuro, perché può gestire Nothing: il risultato sarà Nothing, nella variabile String. TryCast è molto utile, ma non qui.
L'utente Konrad Rudolph sostiene DirectCast () nella domanda Stack Overflow "Funzioni nascoste di VB.NET" .
String
, è improbabile che l'OP stia discutendo di una situazione in cui DirectCast è appropriato.
String
e il ToString
mio reclamo non si applicherebbe. Non dovresti sostenere DirectCast, fino a quando non avrai ristretto l'argomento dalla CONVERSIONE generale.
Secondo l'esame di certificazione, dovresti usare Convert.ToXXX () ogni volta che è possibile per conversioni semplici perché ottimizza le prestazioni meglio delle conversioni CXXX.
Una volta, ricordo di aver visto lo stato della libreria MSDN utilizzare CStr () perché era più veloce. Non so se questo sia vero però.