Perché Resharper preferisce "come" a "è"?

13

Quando scrivo un codice come questo, dove obj è una variabile locale:

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

Offerte di Resharper per cambiarlo in codice come questo:

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

Preferisco il primo, in quanto non offre alcuna possibilità di eccezioni accidentali di riferimento null. Quali ragioni ci sono per preferire l'altra forma?

Perchè Resharper lo consiglia?

    
posta Dave Hillier 06.03.2013 - 12:16
fonte

1 risposta

25

Per prima cosa guarda la risposta di Jon Skeet per la domanda generale sul casting in C #:

Don't do this:

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

Not only is this checking twice, but it may be checking different things, if randomObject is a field rather than a local variable. It's possible for the "if" to pass but then the cast to fail, if another thread changes the value of randomObject between the two.

(...)

If randomObject might be an instance of TargetType and TargetType is a reference type, then use code like this:

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

Poi vedi argomenti simili:

risposta data 06.03.2013 - 12:26
fonte

Leggi altre domande sui tag