2011-09-28 18 views
7

ReSharper'ı kullanmaya başladım ve neden bu kodun yanlış olduğunu düşündüğünü anlamaya çalışıyorum.ReSharper "Olası NullReferenceException" yanlış?

var file = new FileInfo("foobar"); 
return file.Directory.FullName; 

Bu bir "Olası System.NullReferenceException" olarak file.Directory vurgulamaktadır. Bunun mümkün olduğundan emin değilim çünkü dosya nesnesi hiçbir zaman boş olamaz ve FileInfo nesnesinden döndürülen DirectoryInfo nesnesinin nasıl boş olabileceğini anlayamıyorum.

cevap

11

Directory özelliği gerçekten null olabilir. mülkiyet uygulanması kabaca

public DirectoryInfo Directory { 
    get { 
     string directoryName = this.DirectoryName; 
     if (directoryName == null) { 
      return null; 
     } 
     return new DirectoryInfo(directoryName); 
    } 
} 

Kesinlikle null dönebilirsiniz olduğunu. İşte somut bir örnek şu örneğe bakın:

+1

Ayrıca: "yönetmenin tam yolunu" döndürecek olan ['file.DirectoryName'] (http://msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx) ve ayrıca "c: \" için de çalışmalıdır. –

0

Kodu inceleyiniz. Her nokta başka bir nesneyle sondajı temsil eder. Sizin belirttiğiniz gibi, "dosya nesnesi asla boş olamaz" (doğru), bu denklemde başka hangi nesne boş olabilirdi. İpucu: FullName değil.

+0

Lütfen yazıyı sonuna kadar okuyun, bunu bulacaksınız: "[...] ve FileInfo nesnesinden döndürülen DirectoryInfo nesnesinin nasıl boş olabileceğini anlayamıyorum." Bu yüzden OP bunun farkındadır. – UrbanEsc

+0

Daha doğrusu, '. ', Bir bellek konumunun bir özelliği, yöntemi veya benzerlerini çağıracağı için bir referans noktasının kaldırılacağı zamanı temsil eder. Bu nedenle, nokta-notasyonunu kullandığınız her zaman, nesneyi atlatma girişiminde bulunmadan önce * bir şey olduğunu kontrol etmeniz gerekir. – Yuck

+0

@UrbanEsc: o zaman OP yanlış, geçerli bir dizin olmadan potansiyel olarak bir dosya alabilirsiniz. –