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


DirectCast

Обновлен: Ноябрь 2007

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

Заметки

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

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

Ошибки и сбои

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

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

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

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

Типы данных

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

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

Функция CType

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

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

Вызывает InvalidCastException

DirectCast

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

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

Вызывает InvalidCastException

TryCast

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

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

Возвращает 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