Realmente depende de si sabes si o
es una cadena y qué quieres hacer con ella. Si su comentario significa que o
realmente es una cadena, preferiría el (string)o
reparto directo , es poco probable que falle.
La mayor ventaja de usar el lanzamiento directo es que cuando falla, obtienes una InvalidCastException , que te dice más o menos lo que salió mal.
Con el as
operador, si o
no es una cadena, s
se establece en null
, lo cual es útil si no está seguro y desea probar s
:
string s = o as string;
if ( s == null )
{
// well that's not good!
gotoPlanB();
}
Sin embargo, si no realiza esa prueba, la usará s
más tarde y se generará una excepción NullReferenceException . Estos tienden a ser más comunes y mucho más difíciles de rastrear una vez que ocurren en la naturaleza, ya que casi todas las líneas desreferencian una variable y pueden arrojar una. Por otro lado, si está intentando convertir a un tipo de valor (cualquier primitivo, o estructuras como DateTime ), debe usar la conversión directa; as
no funcionará.
En el caso especial de convertir a una cadena, cada objeto tiene un ToString
, por lo que su tercer método puede estar bien si o
no es nulo y cree que el ToString
método podría hacer lo que desea.