2012-08-06 9 views
8

मैं अपनी कक्षा में प्रगति ऑब्जेक्ट को प्रारंभ करने के लिए पहली बार आलसी लोडिंग का उपयोग करने का प्रयास कर रहा हूं। हालांकि, मैं निम्न त्रुटि हो रही है:आलसी <T> आलसी लोडिंग त्रुटि: एक फ़ील्ड प्रारंभकर्ता गैर स्थैतिक फ़ील्ड, विधि या प्रॉपर्टी का संदर्भ नहीं दे सकता

A field initializer cannot reference the non-static field, method, or property.

private Lazy<Progress> m_progress = new Lazy<Progress>(() => 
{ 
    long totalBytes = m_transferManager.TotalSize(); 
    return new Progress(totalBytes); 
}); 

.NET 2.0 में, मैं निम्न कर सकते हैं, लेकिन मैं तारीख दृष्टिकोण करने के लिए एक और अधिक उपयोग करने के लिए पसंद करेंगे:

private Progress m_progress; 
private Progress Progress 
{ 
    get 
    { 
     if (m_progress == null) 
     { 
      long totalBytes = m_transferManager.TotalSize(); 
      m_progress = new Progress(totalBytes); 
     } 
     return m_progress; 
    } 
} 

क्या कोई मदद कर सकता है?

बहुत धन्यवाद।

उत्तर

20

उस प्रारंभकर्ता को कैप्चर-क्लास में पारित होने के लिए this की आवश्यकता होगी, और this फ़ील्ड-प्रारंभकर्ता से उपलब्ध नहीं है। हालांकि, यह एक निर्माता में उपलब्ध है:

private readonly Lazy<Progress> m_progress; 
public MyType() 
{ 
    m_progress = new Lazy<Progress>(() => 
    { 
     long totalBytes = m_transferManager.TotalSize(); 
     return new Progress(totalBytes); 
    }); 
} 

व्यक्तिगत रूप से, मैं सिर्फ get एक्सेसर, हालांकि प्रयोग करेंगे, पी

+0

आपको बहुत बहुत धन्यवाद :) – bobbo

+0

आलसी प्रारंभकर्ता अशक्त लौट सकते हैं, और अभी भी शुरू किया जा सकता है। संपत्ति गेटटर उस मामले में बार-बार शुरू करने की कोशिश करेगा। – wensveen

+0

@Wensveen नहीं यह नहीं होगा: https://gist.github.com/mgravell/b547455bb4afe25cdae44d8cc78b8bdd –

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