С тех пор, как я переместился от VB6 до VB.NET куда-нибудь в 2005, я использовал CType, чтобы сделать кастинг от одного типа данных до другого. Я делаю это, потому что это просто быстрее для ввода, используемый для существования в VB6, и я не знаю, почему я должен использовать DirectCast, если нет, по-видимому, никакого различия между ними.
Я использую TryCast время от времени, потому что я понимаю, что иногда кастинг может перестать работать. Я однако не могу получить различие между CType и DirectCast.
Кто-либо может сказать мне различие в простом простом английском языке что различие два (CType и DirectCast)? Добавление примеров того, где использовать то, что также было бы полезно.
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.
DirectCast в два раза быстрее для типов значений (целые числа и т. Д.), Но идентичен для ссылочных типов.
Для получения дополнительной информации см. Раздел «Функции преобразования, CType, DirectCast и System.Convert» на этой странице MSDN.
Эта страница хорошо это объясняет.
Читая это, я думаю, что когда вы используете DirectCast
, вы уверены, что преобразование будет работать без сужения или расширения (в данном случае числовых данных). Принимая во внимание, что CType
попытается преобразовать в него, разработчик знает о сужении / расширении.