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

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

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

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

40
задан Kiquenet 3 May 2018 в 07:08
поделиться

3 ответа

TryCast и DirectCast - это операторы приведения типов, которые напрямую сопоставляются с поддержкой приведения типов в CLR. Они могут быстро привести объект базового типа к производному типу или распаковать значение типа значения. DirectCast выдает исключение, когда приведение невозможно, TryCast возвращает Nothing в случае сбоя. Обычно вы предпочитаете 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 как языка с динамической типизацией. Но не без проблем, эта дата - день единорога на stackoverflow.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.

53
ответ дан 27 November 2019 в 01:39
поделиться

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

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

16
ответ дан 27 November 2019 в 01:39
поделиться

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

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

1
ответ дан 27 November 2019 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: