São todos iguais? Em que circunstâncias devo escolher um dos outros?
var.ToString ()
CStr (var)
CType (var, String)
DirectCast (var, String)
EDIT: Sugestão de NotMyself …
- TryCast (var, String)
São todos iguais? Em que circunstâncias devo escolher um dos outros?
var.ToString ()
CStr (var)
CType (var, String)
DirectCast (var, String)
EDIT: Sugestão de NotMyself …
Respostas:
Essas são todas ligeiramente diferentes e geralmente têm um uso aceitável.
var.
ToString
()
fornecerá a representação de seqüência de caracteres de um objeto, independentemente do tipo. Use isso se var
ainda não for uma string.CStr
(var)
é o operador de conversão de string VB. Como eu não sou do tipo VB, sugiro evitá-lo, mas não vai doer nada. Eu acho que é basicamente o mesmo que CType
.CType
(var, String)
converterá o tipo especificado em uma string, usando qualquer operador de conversão fornecido.DirectCast
(var, String)
é usado para converter um objeto em uma string. Se você souber que uma variável de objeto é, de fato, uma string, use isso. É o mesmo que (string)var
em c #.TryCast
(como mencionado por @ NotMyself ) é como DirectCast
, mas retornará Nothing
se a variável não puder ser convertida em uma string, em vez de gerar uma exceção. É o mesmo que var as string
em c #. A TryCast
página no MSDN também tem uma boa comparação.TryCast
só funciona para tipos de valor, uma vez que tem de ser um tipo que pode ter Nothing
como valor
CStr(var)
sufocará e gerará uma exceção se o var for DBNull.Value, mas a alternativa Convert.ToString(var)
retornará uma sequência vazia.
Dim myList AS ArrayList=new ArrayList
Quando você escreve (From e In myList select CType(e.Name,String)).ToArray()
, não funciona. Eu vim para escrever ... select CType(e.Name.ToString,String)).ToArray()
e recuperei meu sorriso.
Cstr()
é compilado em linha para melhor desempenho.
CType
permite transmissões entre tipos se um operador de conversão for definido
ToString()
Entre o tipo base e a sequência lança uma exceção se a conversão não for possível.
TryParse()
De String para base typeif
possível, caso contrário, retorna false
DirectCast
usado se os tipos estiverem relacionados por herança ou compartilharem uma interface comum, lançará uma exceção se o elenco não for possível, trycast
não retornará nada nesta instância
O MSDN parece indicar que o Cxxx lança para tipos específicos pode melhorar o desempenho no VB .NET porque eles são convertidos em código embutido. Por alguma razão, ele também sugere o DirectCast, em vez do CType, em certos casos (as documentações indicam que é quando há uma relação de herança; acredito que isso significa que a sanidade do elenco é verificada no momento da 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 eu uso depende do que estou fazendo. Se é o código do protótipo que vou jogar fora, uso o que digito. Se for um código sério, tento usar uma conversão Cxxx. Se não existir, eu uso o DirectCast se tiver uma crença razoável de que há um relacionamento de herança. Se for uma situação em que não faço ideia se a conversão deve ser bem-sucedida (entrada do usuário -> números inteiros, por exemplo), então uso o TryCast para fazer algo mais amigável do que lançar uma exceção para o usuário.
Uma coisa que não posso abalar é que eu uso o ToString em vez do CStr, mas supostamente o Cstr é mais rápido.
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)
O motivo pelo qual prefiro o TryCast é que você não precisa mexer com a sobrecarga de lançar exceções. Seu elenco é bem-sucedido ou sua variável é inicializada como nula e você lida com isso de acordo.
.ToString()
. Um tipo de valor, como Inteiro, não pode ser Nada. Portanto, nesse caso, CStr (número) ou number.ToString () é seguro. No caso geral (não apenas os tipos de valor), o CStr (qualquer que seja) é seguro, porque pode lidar com Nothing - o resultado será Nothing, na variável String. O TryCast é muito útil - mas não aqui.
O usuário Konrad Rudolph defende o DirectCast () na questão Stack Overflow "Hidden Features of VB.NET" .
String
, é improvável que o OP esteja discutindo uma situação em que o DirectCast é apropriado.
String
e ToString
, minha reclamação não se aplicaria. Você não deve advogar pelo DirectCast até ter reduzido o tópico da CONVERSÃO geral.
De acordo com o exame de certificação, você deve usar Convert.ToXXX () sempre que possível para conversões simples, pois otimiza o desempenho melhor que as conversões CXXX.
Ao mesmo tempo, lembro de ter visto o estado da biblioteca do MSDN usar CStr () porque era mais rápido. Eu não sei se isso é verdade.