Первое, что нужно отметить, это то, что VB.NET не имеет прямого аналога с механизмом литья C# (type)instance
. Я приношу это, потому что полезно использовать это в качестве отправной точки для сравнения двух операторов VB.NET (и они являются операторами, а не функциями, хотя у них есть семантика функций).
DirectCast()
более строгий, чем оператор литья C#. Это позволяет вам делать только тогда, когда предмет, на который наложено , уже есть тип, на который вы производите. Он не будет конвертировать. Так, например, вы не можете использовать от short до int, как вы могли бы с помощью C# (int)
. Но вы можете отбрасывать из IEnumerable в массив, если ваша базовая объектная переменная IEnumerable
действительно равна Array
. И, конечно, вы можете отбрасывать из Object на что угодно, предполагая, что тип вашего экземпляра объекта действительно находится ниже вашего типа броска в дереве наследования.
Это желательно, потому что это делает его быстрее. Существует немного меньше преобразований и проверки типов, которые должны иметь место.
CType()
менее строг, чем оператор литья C#. Он будет делать такие вещи, как преобразование строки в целое число, которое вы не можете просто сделать с помощью простого (int)
. Он имеет такую же мощность, как и вызов Convert.To___()
в C#, где ___ является целевым типом вашего броска. Это желательно, потому что он очень мощный, но эта мощность стоит за счет производительности —, но это не так быстро, как DirectCast() или оператор C#, потому что для завершения трансляции может быть довольно много работы.
Как правило, вы можете предпочесть DirectCast()
, когда сможете.
Наконец, вы пропустили одного оператора литья: TryCast()
, который является прямым аналогом оператора C12 as
.
Точная копия этого * литейные Datatypes с DirectCast, CType, TryCast * http://stackoverflow.com/questions/2703585/casting-datatypes-with-directcast-ctype-trycast – MarkJ
Возможные дубликатом [Casting Datatypes с DirectCast, CType, TryCast] (https: // stackoverflow.com/questions/2703585/casting-datatypes-with-directcast-ctype-trycast) – Imad