Различие между DirectCast () и CType () в VB.NET

Я - опытный программист C/C ++/C#, который только что вошел в VB.NET. Я обычно использую CType (и CInt, CBool, CStr) для бросков, потому что это - меньше символов и было первым способом бросить, которому я был подвергнут, но я знаю о DirectCast и TryCast также.

Просто, есть ли какие-либо различия (эффект броска, производительности, и т.д.) между DirectCast и CType? Я понимаю идею TryCast.

97
задан Peter Mortensen 9 September 2016 в 05:21
поделиться

1 ответ

Первое, что следует отметить, это то, что 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 #.

179
ответ дан 24 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

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