2011-09-28 8 views
7

Acabo de empezar a usar ReSharper y estoy tratando de identificar por qué cree que este código es incorrecto.ReSharper "Posible NullReferenceException" mal con FileInfo?

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

Se destaca file.Directory como "System.NullReferenceException posible". No estoy seguro de cómo esto es posible porque el objeto de archivo nunca puede ser nulo y no puedo entender cómo el objeto DirectoryInfo devuelto del objeto FileInfo podría ser nulo alguna vez.

Respuesta

11

La propiedad Directory puede ser realmente null. La implementación de la propiedad es más o menos

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

Definitivamente se puede volver null. Aquí hay un ejemplo concreto

var x = new FileInfo(@"c:\"); 
if (x.Directory == null) { 
    Console.WriteLine("Directory is null"); // Will print 
} 
+1

Además: se podría usar ['file.DirectoryName'] (http://msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx) que devolverá" la ruta completa del directorio ", y también debería funcionar para '" c: \ "'. –

0

Eche un vistazo al código. Cada punto representa la perforación a otro objeto. Como dijiste "el objeto de archivo nunca puede ser nulo" (correcto), ¿qué otro objeto podría ser nulo en esta ecuación? Sugerencia: No es FullName.

+0

Lea la publicación hasta el final, encontrará esto: "[...] y no puedo entender cómo el objeto DirectoryInfo devuelto por el objeto FileInfo podría ser nulo". Entonces el OP es consciente de esto. – UrbanEsc

+0

Más exactamente, el '.' representa un momento en el que se desreferenciará una ubicación de memoria, ya que podría estar llamando a una propiedad, método, etc. Por lo tanto, cada vez que use notación de puntos, debe verificar que el objeto sea * algo * antes de intentar desreferenciarlo. – Yuck

+0

@UrbanEsc: entonces el OP es incorrecto, como es posible que pueda obtener un archivo sin un directorio válido. –

Cuestiones relacionadas