Подтвердить что ты не робот

Кастинг DataTypes с DirectCast, CType, TryCast

С тех пор как я переехал с VB6 на VB.NET где-то в 2005 году, я использовал CType для выполнения кастингов из одного типа данных в другой. Я делаю это, потому что он просто быстрее набирает, используется для существования в VB6, и я не знаю, почему я должен использовать DirectCast, если между ними нет никакой разницы.

Я использую TryCast время от времени, потому что понимаю, что иногда кастинг может завершиться неудачей. Однако я не могу получить разницу между CType и DirectCast.

Может ли кто-нибудь сказать мне разницу в простой простой английской, какая разница между двумя (CType и DirectCast)? Добавление примеров того, где использовать то, что также было бы полезно.

Спасибо.

4b9b3361

Ответ 1

TryCast и DirectCast - это операторы литья, которые непосредственно отображают поддержку CLR для кастинга. Они могут быстро передать объект базового типа производному типу или удалить значение типа значения. DirectCast выдает исключение, когда трансляция невозможна, TryCast возвращает Nothing, если она не удалась. Обычно вы хотите, чтобы DirectCast улавливал ошибки программирования.

CType позволяет перемножить преобразования, которые CLR хмурится. Лучший пример, который я могу придумать, - преобразовать строку в число или дату. Например:

Dim obj As Object
obj = "4/1/2010"
Dim dt As DateTime = CType(obj, DateTime)

Что вы должны будете использовать, если действует опция Strict On. Если он выключен, вы можете сделать это напрямую:

Option Strict Off
...
    Dim dt As DateTime = obj

Очень удобно, конечно, и часть наследия VB.NET как динамически типизированный язык. Но не без проблем, эта дата - день Единорога в stackoverflow.com, но будет днем ​​в январе, когда британцы войдут в строку. Неожиданными преобразованиями является то, что CLR не разрешает их напрямую. Явное, никогда неожиданное преобразование выглядит следующим образом:

Dim dt As DateTime = DateTime.Parse(obj.ToString(), _
    System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormat)

Если вы должны купить в Try/DirectCast vs CType vs явные преобразования, это скорее личный выбор. Если вы сейчас программируете с опцией Strict On, вам обязательно нужно начать использовать Try/DirectCast. Если вы предпочитаете язык VB.NET, потому что вам нравится удобство динамического набора текста, не стесняйтесь оставаться на CType.

Ответ 2

DirectCast в два раза быстрее для типов значений (целые числа... и т.д.), но идентичные для ссылочных типов.

Для получения дополнительной информации см. раздел "Функции преобразования, CType, DirectCast и System.Convert" на странице .

Ответ 3

Эта страница объясняет это хорошо.

Читая его, я думаю, что когда вы используете DirectCast, вы уверены, что преобразование будет работать без сужения или расширения (в данном случае числовых данных). Принимая во внимание, что CType будет пытаться преобразовать его, причем разработчик должен знать о сужении/расширении.

Ответ 4

Под "преобразованием" подразумевается преобразование одного типа данных в другой (например, строка в целое число, десятичное целое число, объект в строку и т.д.).

Под "cast" подразумевается изменение одного типа объекта на другой тип, который связанных с ним одним из следующих правил.

http://www.thedevheaven.com/2012/09/directcast-vs-ctype.html