Resharper neden “olduğu gibi” yerine “olduğu gibi” tercih ediyor?


13

Böyle bir kod yazarken, obj yerel bir değişkendir:

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

Resharper bunu aşağıdaki gibi kodla değiştirmeyi önerir:

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

Yanlışlıkla geçersiz referans istisnaları için hiçbir fırsat sunmadığından öncekini tercih ederim. Diğer formu tercih etmek için hangi sebepler var?

Resharper bunu neden öneriyor?

Yanıtlar:


25

Öncelikle C # 'da döküm hakkında genel soru için Jon Skeet cevabına bakın:

Bunu yapma:

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

Bu sadece iki kez kontrol etmekle kalmaz, randomObject bir yerel değişken yerine bir alan ise farklı şeyleri kontrol ediyor olabilir. Başka bir iş parçacığı ikisi arasında randomObject değerini değiştirirse, "if" in geçmesi ancak dökümün başarısız olması mümkündür.

(...)

RandomObject bir TargetType örneği olabilir ve TargetType bir başvuru türüyse, bunun gibi bir kod kullanın:

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

Sonra benzer konulara bakın:


1
+1 Ayrıca konu hakkında Eric Lippert'in Blog Yayını'na bakın .
Brian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.