TryCast e DirectCast sono operatori di casting che si mappano direttamente al supporto CLR per il casting. Possono eseguire rapidamente il cast di un oggetto di un tipo di base su un tipo derivato o unbox di un valore di un tipo di valore. DirectCast genera un'eccezione quando il cast non è possibile, TryCast restituisce Nothing se non è riuscito. In genere si desidera favorire DirectCast per rilevare errori di programmazione.
CType consente un superset di conversioni, quelle su cui CLR aggrotta la fronte. L'esempio migliore che riesco a pensare è convertire una stringa in numero o data. Per esempio:
Dim obj As Object
obj = "4/1/2010"
Dim dt As DateTime = CType(obj, DateTime)
Quale dovrete usare se Option Strict On è a tutti gli effetti. Se è spento, allora si può fare direttamente:
Option Strict Off
...
Dim dt As DateTime = obj
Molto comodo di corso e di una parte dell'eredità di VB.NET come un linguaggio tipizzato in modo dinamico. Ma non senza problemi, quella data è Unicorn day su stackoverflow.com ma sarà un giorno di gennaio quando un inglese entrerà nella stringa. Le conversioni inaspettate sono la ragione per cui il CLR non le consente direttamente. Il, mai una conversione esplicita sorpresa si presenta così:
Dim dt As DateTime = DateTime.Parse(obj.ToString(), _
System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormat)
se si dovrebbe comprare in try/DirectCast vs CType vs conversioni esplicite è piuttosto una scelta personale. Se ora programmi con Option Strict On, dovresti iniziare a utilizzare Try/DirectCast. Se preferisci il linguaggio VB.NET perché ti piace la praticità della digitazione dinamica, non esitare a rimanere su CType.
fonte
2010-04-24 15:07:23
possibile duplicato del [Differenza tra DirectCast() e CType() in VB.Net] (http://stackoverflow.com/questions/3056514/difference-between-directcast-and-ctype-in -vb-net) – RMalke
@RMalke: La mia domanda è stata posta prima della [domanda duplicata] collegata (http://stackoverflow.com/q/3056514). Ciò è corroborato dal [commento di MarkJ] (http://stackoverflow.com/posts/comments/3138442). Inoltre, la risposta accettata qui spiega il cast di 'CType' in dettaglio, qualcosa in cui la risposta accettata sull'altra domanda non va veramente a finire. Se mai, credo che sia l'altro che deve essere chiuso o altrimenti collegato a questo. –