




CType переведен на приведение, что является проблемой языкового уровня. В сгенерированном IL, например, нет такой вещи, как преобразование object в string. (Боковое примечание: если тип является типом значения, он будет преобразован в инструкцию unbox, но это другая история; среда выполнения вообще не различает ссылки на ссылочные типы Foo и Bar, для простоты я также проигнорировал выброс InvalidCastException, который выполняется инструкцией castclass).
Integer.Parse и CInt в основном обрабатывают исходный объект (строку) и преобразуют его в эквивалентное целое число. Они что-то делают. CType просто инструктирует компилятор языка о преобразовании типов.
Для полноты, эквивалент литья в IL выглядит так:
castclass, если тип является ссылочным.unbox, если тип является типом значения.Однако компилятор Visual Basic преобразует выражение в вызов одного из методов Microsoft.VisualBasic.CompilerServices.Conversions.
Для приведения объектов CType() работает в VB, но не в C# (если вы не ссылаетесь на Microsoft.VisualBasic.dll). Вы также можете использовать DirectCast() или TryCast().
Если вы будете выполнять приведение к определенному собственному типу, вы можете использовать для этого методы класса Convert. (Не то же самое, что Parse / TryParse, это гибриды IsNumeric() и CInt())
Например
Convert.ToInt32()
Convert.ToString()
Convert.ToBoolean()
Для разных типов существует множество других.
Вы всегда можете сделать что-то вроде этого:
var thisInteger = (Int64)objectToconvert;
var thisComplicatedObject = (BAL.ComplicatedObject)objectToConvert;
По сути, поместите тип, который вам нужно преобразовать, в предшествующие скобки. Этот метод не возвращает приятный intellisense, который выполняет операция ctype (), однако вы получаете его в следующей строке.
Это эквивалент C#, а не .NET.