Realmente depende se você sabe se o
é uma string e o que deseja fazer com ela. Se seu comentário significa que o
realmente é uma sequência, eu prefiro o (string)o
elenco direto - é improvável que falhe.
A maior vantagem de usar a conversão direta é que, quando falha, você recebe uma InvalidCastException , que informa praticamente o que deu errado.
Com o as
operador, se o
não for uma sequência, s
está definido como null
, o que é útil se você não tiver certeza e quiser testar s
:
string s = o as string;
if ( s == null )
{
// well that's not good!
gotoPlanB();
}
No entanto, se você não executar esse teste, usará s
mais tarde e lançará uma NullReferenceException . Eles tendem a ser mais comuns e muito mais difíceis de rastrear quando ocorrem na natureza, pois quase todas as linhas referenciam uma variável e podem jogar uma. Por outro lado, se você estiver tentando converter para um tipo de valor (qualquer primitivo ou estrutura como DateTime ), precisará usar a conversão direta - as
isso não funcionará.
No caso especial de conversão para uma string, todo objeto possui um ToString
, portanto seu terceiro método pode ser bom se o
não for nulo e você acha que o ToString
método pode fazer o que você deseja.