Поделиться через


Оператор DirectCast (Visual Basic)

Представляет тип операции преобразования на основе наследования или реализации.

Заметки

DirectCast не использует процедуру поддержки времени выполнения Visual Basic для преобразования, поэтому она обеспечивает отчасти более высокую производительность, чем CType при прямом и обратном преобразовании типа данных к Object.

Ключевое слово DirectCast используется аналогично ключевым словам Функция CType (Visual Basic) и Оператор TryCast (Visual Basic). В качестве первого аргумента указывается выражение, а в качестве второго — тип, в который надо преобразовать. DirectCast требует реализации или связи наследования между типами данных двух аргументов. Это означает, что один тип должен наследовать или реализовывать другой.

Ошибки и сбои

DirectCast создает ошибку компилятора, если она обнаруживает, что связи наследования или реализации не существует. Однако отсутствие ошибки компилятора не гарантирует успешное преобразование. Если необходимое преобразование является сужающим, то возможен сбой во время выполнения. В этом случае среда выполнения создает ошибку InvalidCastException.

Ключевые слова преобразований

Ниже представлено сравнение зарезервированных слов преобразований типа.

Ключевое слово

Типы данных

Отношение аргументов

Ошибка во время выполнения

Функция CType (Visual Basic)

Все типы данных

Между двумя типами данных необходимо определить расширяющее или сужающее преобразование.

Вызывает InvalidCastException

DirectCast

Все типы данных

Один тип должен наследовать или реализовывать другой

Вызывает InvalidCastException

Оператор TryCast (Visual Basic)

Только ссылочные типы

Один тип должен наследовать или реализовывать другой

Возвращает Nothing (Visual Basic)

Пример

Далее показано два примера использования типа DirectCast. В первом примере во время его выполнения создается ошибка, а во втором он завершается успешно.

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)

В предыдущем примере типом времени выполнения q является Double. CType выполняется успешно, поскольку Double можно преобразовать в Integer. Однако первый DirectCast во время выполнения создает ошибку, так как тип времени выполнения Double не имеет отношения наследования с Integer, даже если существует преобразование. Второй DirectCast завершается успешно, так как он преобразует из типа Form в тип Control, от которого наследуется Form.

См. также

Ссылки

Convert.ChangeType

Основные понятия

Расширяющие и сужающие преобразования (Visual Basic)

Явные и неявные преобразования (Visual Basic)