Приведение типов данных с помощью DirectCast, CType, TryCast

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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам