¿Por qué Resharper prefiere "as" a "is"?

13

Cuando escribo un código como este, donde obj es una variable local:

if (obj is IMyInterface)
{
   var result = (IMyInterface)obj;
   // ....
}

Resharper ofrece cambiarlo a un código como este:

var result = obj as IMyInterface;
if (result != null)
{
   // ...
}

Prefiero el primero, ya que no ofrece ninguna oportunidad para excepciones de referencia nulas accidentales. ¿Qué razones existen para preferir la otra forma?

¿Por qué Resharper recomienda esto?

    
pregunta Dave Hillier 06.03.2013 - 12:16

1 respuesta

25

En primer lugar, consulte la respuesta de Jon Skeet para una pregunta general sobre la conversión en C #:

  

No hagas esto:

if (randomObject is TargetType)
{
    TargetType foo = (TargetType) randomObject;
    // Do something with foo
}
     

No solo se está comprobando dos veces, sino que puede estar verificando cosas diferentes, si randomObject es un campo en lugar de una variable local. Es posible que el "si" pase, pero luego la conversión falla, si otro hilo cambia el valor de randomObject entre los dos.

     

(...)

     

Si randomObject podría ser una instancia de TargetType y TargetType es un tipo de referencia, entonces use un código como este:

TargetType convertedRandomObject = randomObject as TargetType;
if (convertedRandomObject != null)
{
    // Do stuff with convertedRandomObject
}

Luego vea temas similares:

respondido por el yBee 06.03.2013 - 12:26

Lea otras preguntas en las etiquetas