2013-08-14 6 views
9

मुझे एक कोड विश्लेषण चेतावनी मिल रही है जो एक झूठी सकारात्मक प्रतीत होती है।झूठी सीए 1812 चेतावनी: "आंतरिक वर्ग जो स्पष्ट रूप से कभी भी तत्काल नहीं है ..."

CA1812 : Microsoft.Performance : 'MyClass.MyPrivateClass' is an internal class that is apparently never instantiated. If so, remove the code from the assembly. If this class is intended to contain only static methods, consider adding a private constructor to prevent the compiler from generating a default constructor.

कैसे मैं इस चेतावनी से छुटकारा मिलता है? मैं चेतावनियों को दबाने के लिए पसंद नहीं करता जब तक कि मुझे यकीन नहीं है कि मैं इसे अन्यथा नहीं बचा सकता।

कक्षाएं इस तरह दिखेगा:

namespace Some.Namespace 
{ 
    public class MyClass 
    { 
     private class MyPrivateClass 
     { 
      public int Id { get; set; } 
      public ModelObject { get; set; } 
     } 
    } 
} 

मैं इस तरह इसका इस्तेमाल:

private IQueryable<MyPrivateClass> GetMyPrivateClasses() 
{ 
    return this.Repository().All() 
     .Select(m => new MyPrivateClass { Id = m.Id, ModelObject = m }; 
} 

इस प्रयोग इन्स्टेन्शियशन के रूप में गिनती नहीं करता है?

+5

क्या 'GetMyPrivateClasses()' स्वयं को निश्चित रूप से बुलाया जाता है? (यह गिनती नहीं है अगर इसे केवल किसी अन्य निजी विधि से परोक्ष रूप से कहा जाता है जिसे कभी भी नहीं कहा जाता है) –

+0

@ मैथ्यू वाटसन हां निश्चित रूप से। मेरा कोड सभी सही ढंग से काम कर रहा है, और यह विशेष विधि मेरी रिपोर्ट का मुख्य हिस्सा है, इसलिए हां। –

+0

भले ही इसे कहा जाता है, यह स्पष्ट नहीं है कि कक्षा को तत्काल किया जाएगा क्योंकि यह विधि निष्पादित किए बिना एक क्वेरी लौटाती है (उदाहरण के लिए 'ToList' का उपयोग करके)। –

उत्तर

15

मुझे लगता है कि यह आईएल की जांच कर रहा है; और वास्तव में - आईएल में कभी भी new MyPrivateClass निर्देश नहीं है - क्योंकि वह कथन IQueryable<T> के खिलाफ संभवतः चल रहा है, इसलिए लैम्ब्डा अभिव्यक्ति वृक्ष है। इसमें कुछ Expression.New होंगे, और कुछ typeof(MyPrivateClass) - लेकिन new MyPrivateClass नहीं होंगे।

इस मामले में, त्रुटि भ्रामक है। बस इसे दबाओ।

+2

यह चेतावनी विवरण में स्पष्ट रूप से भी कहा गया है: http://msdn.microsoft.com/en-us/library/ms182265.aspx – BartoszKP

0

अपनी कक्षा को आंतरिक या सार्वजनिक में बदलें, जो समस्या हल करती है। वैसे भी, आप बाहरी कक्षा से अपनी आंतरिक कक्षा निकाल सकते हैं ...

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