Оператор TryCast (Visual Basic)
Представляет операцию преобразования типов, которая не выдает исключение.
Заметки
Если попытка преобразования завершилась неудачно, то CType и DirectCast выдадут ошибку InvalidCastException. Это может отрицательно повлиять на производительность приложения. TryCast возвращает Nothing (Visual Basic), поэтому вместо обработки возможных исключений необходимо только проверить возвращаемый результат на равенство Nothing.
Ключевое слово TryCast используется так же, как ключевые слова Функция CType (Visual Basic) и Оператор DirectCast (Visual Basic). В качестве первого аргумента указывается выражение, а в качестве второго — тип, в который надо преобразовать. TryCast работает только со ссылочными типами, такими как классы или интерфейсы. Она требует отношения наследования или реализации между двумя типами. Это означает, что один тип должен наследовать или реализовывать другой.
Ошибки и сбои
TryCast создает ошибку компилятора, если она обнаруживает, что отношения наследования или реализации не существует. Однако отсутствие ошибки компилятора не гарантирует успешное преобразование. Если необходимое преобразование является сужающим, то возможен сбой во время выполнения. В этом случае TryCast вернет Nothing (Visual Basic).
Ключевые слова преобразований
Ниже представлено сравнение зарезервированных слов преобразований типа.
Ключевое слово |
Типы данных |
Отношение аргументов |
Ошибка во время выполнения |
Все типы данных |
Между двумя типами данных необходимо определить расширяющее или сужающее преобразование. |
Вызывает InvalidCastException |
|
Все типы данных |
Один тип должен наследовать или реализовывать другой |
Вызывает InvalidCastException |
|
TryCast |
Только ссылочные типы |
Один тип должен наследовать или реализовывать другой |
Возвращает Nothing (Visual Basic) |
Пример
В следующем примере показано использование TryCast.
Function PrintTypeCode(ByVal obj As Object) As String
Dim objAsConvertible As IConvertible = TryCast(obj, IConvertible)
If objAsConvertible Is Nothing Then
Return obj.ToString() & " does not implement IConvertible"
Else
Return "Type code is " & objAsConvertible.GetTypeCode()
End If
End Function