A primeira coisa a observar é que o VB.NET não tem um análogo direto ao (type)instance
mecanismo de conversão do C # . Eu trago isso porque é útil como um ponto de partida na comparação dos dois operadores VB.NET (e eles são operadores, não funções, embora tenham semântica de função).
DirectCast()
é mais estrito do que o operador de conversão C #. Ele só permite que você lance quando o item que está sendo lançado já é do tipo para o qual você está lançando. Eu acredito que ainda irá desempacotar os tipos de valor, mas caso contrário não fará nenhuma conversão. Portanto, por exemplo, você não pode converter de short
para int
, como faria com um (int)
elenco C # . Mas você pode converter de um IEnumerable
para um array, se sua IEnumerable
variável de objeto subjacente realmente for um Array
. E, claro, você pode converter de Object
para qualquer coisa, assumindo que o tipo de sua instância de objeto realmente está em algum lugar abaixo do seu tipo de conversão na árvore de herança.
Isso é desejável porque é muito mais rápido . Há menos conversão e verificação de tipo necessárias.
CType()
é menos estrito do que o operador de conversão C #. Ele fará coisas que você simplesmente não pode fazer com uma (int)
conversão de estilo simples , como converter uma string em um inteiro. Ele tem tanto poder quanto chamar Convert.To___()
em C #, onde ___
é o tipo de destino de seu elenco.
Isso é desejável porque é muito poderoso. No entanto, esse poder tem um custo de desempenho; não é tão rápido quanto o DirectCast()
operador de elenco do C # porque pode precisar de muito trabalho para terminar o elenco. Geralmente, você deve preferir DirectCast()
quando puder.
Por fim, você perdeu um operador de conversão:, TryCast()
que é um análogo direto do as
operador do C # .