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

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

Замечания

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

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

Ошибки и сбои

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

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

Сравнение ключевое слово преобразования типов выглядит следующим образом.

Ключевое слово Типы данных Связь аргументов Сбой во время выполнения
CType Function Любые типы данных Преобразование расширения или сужения должно быть определено между двумя типами данных Бросает InvalidCastException
DirectCast Любые типы данных Один тип должен наследоваться от другого типа или реализовать другой тип Бросает InvalidCastException
Оператор TryCast Только ссылочные типы Один тип должен наследоваться от другого типа или реализовать другой тип Возвращает ничего

Пример

В следующем примере демонстрируется два использования 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 Второй выполняется успешно, так как он преобразуется из типа в тип FormControl, от которого Form наследуется.

См. также