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)
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 terNothing
como valorCStr(var)
sufocará e gerará uma exceção se o var for DBNull.Value, mas a alternativaConvert.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 definidoToString()
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 basetypeif
possível, caso contrário, retorna falseDirectCast
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ânciafonte
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.
fonte
Eu prefiro a seguinte sintaxe:
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.
fonte
.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" .
fonte
String
, é improvável que o OP esteja discutindo uma situação em que o DirectCast é apropriado.String
eToString
, 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.
fonte
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.
fonte