2011-09-28 2 views
7

방금 ​​ReSharper를 사용하기 시작했으며이 코드가 잘못되었다고 생각하는 이유를 확인하려고합니다.ReSharper "가능한 NullReferenceException"FileInfo에 문제가 있습니까?

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

"Possible System.NullReferenceException"으로 file.Directory을 강조 표시합니다. 파일 개체가 결코 null이 될 수 없기 때문에 가능한 방법을 잘 모르겠습니다. DirectoryInfo 개체가 FileInfo 개체에서 반환 된 결과가 null 일 수 있다는 것을 알 수 없습니다.

답변

11

Directory 속성은 실제로 null 일 수 있습니다. 속성의 구현은 대략

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

그것은 확실히 null을 반환 할 수 있습니다. 여기에 구체적인 예가 있습니다

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

또한 : "file.DirectoryName'] (http://msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx)를 사용하면"해당 디렉토리의 전체 경로 "를 반환 할 수 있습니다. ''c : \ "'에서도 작동해야합니다. –

0

코드를 살펴보십시오. 모든 점은 다른 객체에 대한 드릴링을 나타냅니다. "파일 객체가 결코 null이 될 수 없다"고 말한 것처럼 (올바른)이 방정식에서 다른 객체는 null 일 수 있습니다. 힌트 : FullName이 아닙니다.

+0

마지막에 게시물을 읽으면 다음과 같이 나타납니다. "[...] 그리고 FileInfo 객체에서 반환 된 DirectoryInfo 객체가 null 일 수있는 방법을 알 수 없습니다." 그래서 OP는 이것을 알고 있습니다. – UrbanEsc

+0

보다 정확하게, '.'는 속성, 메소드 등을 호출 할 수있는 메모리 위치가 참조 해제되는 시간을 나타냅니다. 따라서 점 표기법을 사용할 때마다 객체를 역 참조하려고하기 전에 객체가 * 무언가 *인지 확인해야합니다. – Yuck

+0

@UrbanEsc : OP가 올바르지 않습니다. 잠재적으로 올바른 디렉토리가없는 파일을 얻을 수 있습니다. –