2014-12-01 4 views
7

यह this one से अलग है क्योंकि उस स्थिति में चेतावनी वैध थी। इस मामले में, स्वीकृत उत्तर के अनुसार चेतावनी अमान्य है। मैंने उस सवाल को देखा जब मैं जवाब की तलाश में था, तो यह इसका जवाब नहीं देता है। नीचे के रूप में छवि में दिखाया गया stashEntities की चर्चा करते हुएक्या यह रेसर्पर "डिस्पोजेड क्लोजर तक पहुंच" चेतावनी देने के लिए कुछ चेतावनी दे रहा है?

internal List<PaletteClass> GetPaletteList(int userId) 
    { 
     using(var stashEntities = new StashEntities<StashClass>())    
     using(var paletteEntities = new PaletteEntities<PaletteClass>()) 
     { 
      var paletteList = from palette in paletteEntities.Palettes      
       from stash in stashEntities.Stashes 
       where palette.UserId == userId && stash.StashId == palette.StashId 
       select palette; 
      return paletteList.ToList(); 
     } 
    } 

कहाँ StashEntities और PaletteEntities DBContext से विरासत, मैं 'निपटाए बंद करने के लिए पहुँच' चेतावनी मिलती है:

को देखते हुए निम्नलिखित कोड।

enter image description here

मुझे पता है कि इस मामले हैं, जहां अभिव्यक्ति के बाद एक पैरामीटर दायरे से बाहर चला जाता है मूल्यांकन किया जाता है के खिलाफ की रक्षा करने के लिए है। लेकिन, इस मामले में अभिव्यक्ति को उपयोग के भीतर एक सूची में असाइन किया गया है, इसलिए stashEntities गुंजाइश में होना चाहिए।

ध्यान दें कि अगर मैं अभिव्यक्ति स्वैप इस प्रकार है:

var paletteList = from stash in stashEntities.Stashes 
        from palette in paletteEntities.Palettes           
        where palette.UserId == userId && stash.StashId == palette.StashId 
        select palette; 
return paletteList.ToList(); 

तो ReSharper paletteEntities को चेतावनी ले जाता है।

प्रश्न: क्या यह रेसर्पर इस मामले में चिंता करने के लिए कुछ चेतावनी दे रहा है या क्या मुझे इस लाइन के लिए अनदेखा करने के लिए रीसर्पर टिप्पणी जोड़नी चाहिए?

बोनस प्रश्न (यदि पिछले प्रश्न का उत्तर अनदेखा किया गया है): क्या होगा यदि मैंने अभी तक टेलिस्टिस्ट को कॉललिस्ट() को कॉल किए बिना और अभिव्यक्ति को मूल्यांकन करने के लिए मजबूर किया है तो क्या होगा? तथ्य यह है कि ReSharper paletteEntities (मूल उदाहरण में) के बारे में चिंता नहीं करता है, मुझे लगता है कि इसे गुंजाइश रखने के लिए कुछ चल रहा है, क्या यह वही लागू होगा और सभी ठीक रहेगा?

अपडेट/सरलीकरण

नीचे छवि में दिखाया है, भले ही केवल एक DBContext (stashPaletteEntities) प्रयोग किया जाता है, मैं एक ही संदेश जिसका अर्थ है कि स्वीकार किए जाते हैं जवाब सही है मिल के रूप में - इस में एक बग है ReSharper। यदि stashPaletteEntities का जिक्र करने वाली पहली पंक्ति ठीक है, तो दूसरा भी होना चाहिए।

enter image description here

उत्तर

13

यह कुछ ऐसा है एक बग उनके dev board में वर्णित है, काफी देर के लिए ReSharper में की गई है। दुर्भाग्य से यह 6.1 के बाद से एक मुद्दा रहा है।

दुर्भाग्यवश, रीशेर्पर विश्लेषण ट्रैक करने के लिए पर्याप्त स्मार्ट नहीं है, उस क्वेरी अभिव्यक्ति को निश्चित रूप से "उपयोग ..." ब्लॉक के अंदर निष्पादित किया गया है। अभी के लिए, यह केवल एक अभिव्यक्ति में ट्रैक करता है।

हम भविष्य में होशियारी को बढ़ाने के लिए जा रहे हैं विज्ञप्ति

अनिवार्य रूप से, विश्लेषण इंजन केवल एक using एक भी अभिव्यक्ति के भीतर के साथ एक from मेल कर सकते हैं। यह कोड की कार्यक्षमता को प्रभावित नहीं करेगा; केवल चेतावनी, और यह अनदेखा करने के लिए पूरी तरह से सुरक्षित है। .ToList() को हटाने से अभिव्यक्ति वृक्ष की पार्सिंग प्रभावित नहीं होगी।

संबंधित मुद्दे