तो कोड विश्लेषण कह रहा है कि Enumarble.Where(this ...)
WhereListIterator<T>
का एक उदाहरण है, जो है (होना करने के लिए लग रहा है) नेट रूपरेखा है कि IDisposable
लागू करता है के भीतर एक आंतरिक प्रकार लौटा रहा है ।Coverity, Enumerable.Where (इस ...), और IDisposable
कवरेज को IDisposable
को अनचाहे जाने के लिए पसंद नहीं है, और इसलिए यह सुझाव दिया गया है कि मैं उस उदाहरण का निपटान करता हूं। स्पष्ट रूप से मैं कुछ प्रकार की जांच किए बिना उदाहरण का निपटान नहीं कर सकता, क्योंकि Enumerable.Where(this ...)
IEnumerable<T>
लौटने के लिए कहा जाता है, जो IDisposable
से ihnerit नहीं है।
मेरा प्रश्न यह है: क्या .NET मुझे WhereListIterator<T>
का निपटान करने की उम्मीद करता है, या पुनरावृत्तकर्ता स्वयं को निपटाने का प्रयास करता है (कहें, प्रत्येक गणना के बाद)। अगर मुझे इसका निपटान करने की उम्मीद नहीं है, तो इंटरफेस क्यों लागू किया गया है? यह मुझे तीसरे, थोड़ा असंबंधित प्रश्न की ओर ले जाता है: यदि IDisposable
स्पष्ट रूप से कार्यान्वित किया गया था, तो क्या कवरेज (कोड विश्लेषण) अभी भी सोचता है कि मुझे इसका निपटान करना चाहिए?
कोड उदाहरण:
var myList = new List<int>{ 1, 2, 3, 4 };
var evenNumbers = myList.Where(x => x % 2 == 0);
foreach(var number in evenNumbers)
{
Console.WriteLine(number);
}
if(evenNumbers is IDisposable)
{
((IDisposable)evenNumbers).Dispose(); // This line will be executed
}
foreach पाश स्वचालित रूप से आपकी ओर से निपटान कॉल पर फोन करना चाहिए; यदि एक कोड विश्लेषण उपकरण उस तथ्य को नहीं जानता है तो आपको शायद अधिक सटीक कोड विश्लेषण टूल का उपयोग करना चाहिए। आप इसे टूल के रखरखावकर्ताओं को बग के रूप में रिपोर्ट करने पर विचार कर सकते हैं। –
यह मेरा विचार बिल्कुल सही था, लेकिन इसके बारे में जिद्दी होने के बजाय, मुझे लगा कि मुझे समुदाय से पूछना चाहिए। –
या, आपको उन लोगों के लिए इंतजार करना चाहिए जो एरिक लिपर्ट को अपनी सामग्री को फिर से लिखने के लिए उस विश्लेषण उपकरण का उत्पादन करते हैं। यह समस्या अब कवरिटी में मौजूद नहीं है। –