Operatore DirectCast (Visual Basic)DirectCast Operator (Visual Basic)

Introduce un'operazione di conversione del tipo basata sull'ereditarietà o sull'implementazione.Introduces a type conversion operation based on inheritance or implementation.

CommentiRemarks

DirectCast non usa le routine di supporto della fase di esecuzione Visual Basic per la conversione, pertanto può fornire prestazioni leggermente migliori rispetto a quando si esegue la conversione CType da e verso il tipo di dati Object .DirectCast does not use the Visual Basic run-time helper routines for conversion, so it can provide somewhat better performance than CType when converting to and from data type Object.

Si usa la DirectCast parola chiave analoga a quella usata per la funzione CType e la parola chiave dell' operatore TryCast .You use the DirectCast keyword similar to the way you use the CType Function and the TryCast Operator keyword. È possibile specificare un'espressione come primo argomento e un tipo in cui convertirla come secondo argomento.You supply an expression as the first argument and a type to convert it to as the second argument. DirectCast richiede una relazione di ereditarietà o implementazione tra i tipi di dati dei due argomenti.DirectCast requires an inheritance or implementation relationship between the data types of the two arguments. Ciò significa che un tipo deve ereditare da o implementare l'altro.This means that one type must inherit from or implement the other.

Errori ed erroriErrors and Failures

DirectCast genera un errore del compilatore se rileva che non esiste alcuna relazione di ereditarietà o implementazione.DirectCast generates a compiler error if it detects that no inheritance or implementation relationship exists. Tuttavia, la mancanza di un errore del compilatore non garantisce una conversione corretta.But the lack of a compiler error does not guarantee a successful conversion. Se la conversione desiderata è più restrittiva, potrebbe verificarsi un errore in fase di esecuzione.If the desired conversion is narrowing, it could fail at run time. In tal caso, il runtime genera un InvalidCastException errore.If this happens, the runtime throws an InvalidCastException error.

Parole chiave di conversioneConversion Keywords

Di seguito è riportato un confronto delle parole chiave di conversione del tipo.A comparison of the type conversion keywords is as follows.

Parola chiaveKeyword Tipi di datiData types Relazione tra argomentiArgument relationship Errore di run-timeRun-time failure
CType FunctionCType Function Qualsiasi tipo di datiAny data types È necessario definire una conversione verso un tipo di dati più piccolo o più piccolo tra i due tipi di datiWidening or narrowing conversion must be defined between the two data types Genera InvalidCastExceptionThrows InvalidCastException
DirectCast Qualsiasi tipo di datiAny data types Un tipo deve ereditare da o implementare l'altro tipoOne type must inherit from or implement the other type Genera InvalidCastExceptionThrows InvalidCastException
Operatore TryCastTryCast Operator Solo tipi di riferimentoReference types only Un tipo deve ereditare da o implementare l'altro tipoOne type must inherit from or implement the other type Non restituisce alcun risultatoReturns Nothing

EsempioExample

Nell'esempio seguente vengono illustrati due utilizzi di DirectCast , uno che non riesce in fase di esecuzione e uno che ha esito positivo.The following example demonstrates two uses of DirectCast, one that fails at run time and one that succeeds.

Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)

Nell'esempio precedente, il tipo in fase di esecuzione di q è Double .In the preceding example, the run-time type of q is Double. CType ha esito positivo perché Double può essere convertito in Integer .CType succeeds because Double can be converted to Integer. Tuttavia, il primo DirectCast errore viene eseguito in fase di esecuzione perché il tipo in fase di esecuzione di Double non ha una relazione di ereditarietà con Integer , anche se esiste una conversione.However, the first DirectCast fails at run time because the run-time type of Double has no inheritance relationship with Integer, even though a conversion exists. Il secondo DirectCast ha esito positivo perché converte dal tipo Form al tipo Control , da cui Form eredita.The second DirectCast succeeds because it converts from type Form to type Control, from which Form inherits.

Vedere ancheSee also