Como devo lançar em VB.NET?
Pergunta
Tudo isso é igual?Em que circunstâncias devo escolher um em vez dos outros?
var.ToString()
CStr(var)
CType(var,String)
DirectCast(var, String)
EDITAR:Sugestão de Eu não…
- TryCast(var, String)
Solução
Todos são ligeiramente diferentes e geralmente têm um uso aceitável.
var.
ToString
()
fornecerá a representação em string de um objeto, independentemente do tipo.Use isso sevar
ainda não é uma string.CStr
(var)
é o operador de conversão de string VB.Eu não sou um cara VB, então sugiro evitá-lo, mas não vai doer nada.Eu acho que é basicamente o mesmo queCType
.CType
(var, String)
converterá o tipo fornecido em uma string, usando quaisquer operadores de conversão fornecidos.DirectCast
(var, String)
é usado para converter um objeto em uma string.Se você sabe que uma variável de objeto é, na verdade, uma string, use isto.Isto é o mesmo que(string)var
em C#.TryCast
(como mencionado por @Eu não) é comoDirectCast
, mas retornaráNothing
se a variável não puder ser convertida em uma string, em vez de lançar uma exceção.Isto é o mesmo quevar as string
em C#.OTryCast
página no MSDN também tem uma boa comparação.
Outras dicas
Cstr()
é compilado em linha para melhor desempenho.
CType
permite conversões entre tipos se um operador de conversão for definido
ToString()
Entre o tipo base e a string lança uma exceção se a conversão não for possível.
TryParse()
Da string à base typeif
possível caso contrário retorna falso
DirectCast
usado se os tipos estiverem relacionados via herança ou compartilharem uma interface comum, lançará uma exceção se a conversão não for possível, trycast
não retornará nada neste caso
Eu prefiro a seguinte sintaxe:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
Hah, você pode dizer que normalmente escrevo código em C#.8)
A razão pela qual prefiro TryCast é que você não precisa mexer com a sobrecarga de lançar exceções.Sua conversão foi bem-sucedida ou sua variável foi inicializada como nula e você lida com isso de acordo.
MSDN parece indicar que as conversões Cxxx para tipos específicos podem melhorar o desempenho no VB .NET porque são convertidas em código embutido.Por alguma razão, também sugere DirectCast ao contrário de CType em certos casos (a documentação afirma que é quando há um relacionamento de herança;Acredito que isso significa que a sanidade da conversão é verificada em tempo de compilação e otimizações podem ser aplicadas, enquanto o CType sempre usa o tempo de execução do VB.)
Quando estou escrevendo código VB .NET, o que uso depende do que estou fazendo.Se for um código de protótipo que vou jogar fora, uso tudo o que digito.Se for um código que estou falando sério, tento usar uma conversão Cxxx.Se não existir, uso o DirectCast se tiver uma crença razoável de que existe um relacionamento de herança.Se for uma situação em que não tenho ideia se a conversão deve ser bem-sucedida (entrada do usuário -> números inteiros, por exemplo), então uso TryCast para fazer algo mais amigável do que lançar uma exceção para o usuário.
Uma coisa que não consigo evitar é que costumo usar ToString em vez de CStr, mas supostamente Cstr é mais rápido.
Do utilizador Konrad Rodolfo defensores para DirectCast() na pergunta Stack Overflow "Recursos ocultos do VB.NET".
De acordo com o exame de certificação, você deve usar Convert.ToXXX() sempre que possível para conversões simples, pois otimiza melhor o desempenho do que as conversões CXXX.
Certa vez, lembro-me de ver o estado da biblioteca MSDN para usar CStr() porque era mais rápido.Eu não sei se isso é verdade.