2011-09-28 7 views
7

मैंने अभी रीशेपर का उपयोग करना शुरू कर दिया है और मैं यह पहचानने की कोशिश कर रहा हूं कि ऐसा क्यों लगता है कि यह कोड गलत है।ReSharper "संभावित NullReferenceException" FileInfo के साथ गलत है?

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

यह file.Directory एक "संभावित System.NullReferenceException" के रूप में प्रकाश डाला गया है। मुझे यकीन नहीं है कि यह कैसे संभव है क्योंकि फ़ाइल ऑब्जेक्ट कभी भी शून्य नहीं हो सकता है और मैं यह नहीं समझ सकता कि DirectoryInfo ऑब्जेक्ट FileInfo ऑब्जेक्ट से वापस कैसे लौटाया जा सकता है।

उत्तर

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

कोड पर एक नज़र डालें। प्रत्येक बिंदु दूसरे ऑब्जेक्ट पर ड्रिलिंग का प्रतिनिधित्व करता है। जैसा कि आपने कहा था "फ़ाइल ऑब्जेक्ट कभी शून्य नहीं हो सकता" (सही), इस समीकरण में अन्य वस्तु संभवतः शून्य हो सकती है। संकेत: यह पूर्णनाम नहीं है।

+0

कृपया पोस्ट को अंत में पढ़ें, आपको यह मिल जाएगा: "[...] और मैं यह नहीं समझ सकता कि FileInfo ऑब्जेक्ट से DirectoryInfo ऑब्जेक्ट कैसे वापस आ गया है, यह कभी भी शून्य हो सकता है।" तो ओपी इस बारे में पता है। – UrbanEsc

+0

अधिक सटीक रूप से, '.' उस समय का प्रतिनिधित्व करता है जब एक स्मृति स्थान को संदर्भित किया जाएगा क्योंकि यह किसी संपत्ति, विधि या अन्य को कॉल कर सकता है। तो जब भी आप डॉट-नोटेशन का उपयोग कर रहे हों, तो आपको यह जांचना होगा कि ऑब्जेक्ट * कुछ * है जिसे आप इसे कम करने का प्रयास करते हैं। – Yuck

+0

@UrbanEsc: तो ओपी गलत है, इसलिए आप संभावित रूप से वैध निर्देशिका के बिना फ़ाइल प्राप्त कर सकते हैं। –