TryCast
Обновлен: Ноябрь 2007
Представляет операцию преобразования типов, которая не выдает исключение.
Заметки
Если попытка преобразования завершилась неудачно, то CType и DirectCast выдадут ошибку InvalidCastException. Это может негативно сказаться на производительности приложения. TryCast возвращает Nothing (Visual Basic), поэтому вместо обработки возможных исключений, необходимо только проверить возвращаемый результат на Nothing.
Ключевое слово TryCast используется так же, как ключевые слова Функция CType и DirectCast. В качестве первого аргумента указывается выражение, а во втором аргументе — тип, в который надо преобразовать. 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