DirectCast vs CType
CType puede convertir un tipo de dato diferente del indicado siempre y cuando esto sea posible. (Por ejemplo, de Double a Integer)
DirectCast al contrario no, por ejemplo de Double a Integer daría un error ya que Double no es del tipo Integer. Por tanto, si se sabe que el objeto a convertir debería ser del mismo tipo que el objeto una vez convertido, se recomiendo usar DirectCast.
A continuación, dejo algunos ejemplos que aclaran la situación.
Dim obj As Object = 1 ' obj contiene un entero
Dim str As String = CType(obj, String) ' Valido, CType convierte a
String
Dim entero As Integer = CType(obj, Integer) ' Valido, CType hace un cast a
Integer
Dim str1 As String = DirectCast(obj, String) ' Error, obj no contiene un
String
Dim entero1 As Integer = DirectCast(obj, Integer) ' Valido, obj contiene un
Integer