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