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