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)
Foi útil?

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 se var 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 que CType.
  • 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) é como DirectCast, 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 que var as string em C#.O TryCast 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.

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top