Я - опытный программист C/C ++/C#, который только что вошел в VB.NET. Я обычно использую CType (и CInt, CBool, CStr) для бросков, потому что это - меньше символов и было первым способом бросить, которому я был подвергнут, но я знаю о DirectCast и TryCast также.
Просто, есть ли какие-либо различия (эффект броска, производительности, и т.д.) между DirectCast и CType? Я понимаю идею TryCast.
Первое, что следует отметить, это то, что VB.NET не имеет прямого аналога (type) instance
C # механизма приведения типов. Я поднимаю это, потому что полезно использовать это в качестве отправной точки при сравнении двух операторов VB.NET (и они являются операторами, а не функциями, хотя они имеют семантику функций).
DirectCast ()
более строгий, чем оператор приведения в C #. Он позволяет вам применять только тогда, когда применяемый элемент уже имеет тип, к которому вы выполняете приведение. Никакого преобразования он не сделает. Так, например, вы не можете преобразовать short в int, как вы могли бы сделать преобразование C # (int)
. Но вы можете привести из IEnumerable к массиву, если ваша базовая объектная переменная IEnumerable
действительно является Array
. И, конечно же, вы можете привести объект к чему угодно, предполагая, что тип вашего экземпляра объекта действительно находится где-то ниже вашего типа приведения в дереве наследования.
Это желательно, потому что это делает его быстрее . Требуется немного меньше преобразований и проверки типов.
CType ()
менее строг, чем оператор приведения в C #. Он будет делать такие вещи, как преобразование строки в целое число, что нельзя сделать простым преобразованием (int)
. У него столько же возможностей, сколько у вызова Convert.To ___ ()
в C #, где ___ - это целевой тип вашего приведения. Это желательно, потому что это очень мощно, но эта мощность достигается за счет производительности - это не так быстро, как DirectCast () или оператор C # приведения, потому что может потребоваться довольно много работы, чтобы завершить приведение.
Как правило, вы должны предпочесть DirectCast ()
, когда можете.
Наконец, вы пропустили один оператор приведения типов: TryCast ()
, который является прямым аналогом оператора as
в C #.