2016-02-05 9 views
5

जब मैं यह कर:विसंगति परिणाम

currentPage = metadataResponse.ApplicationType.Pages.Find(
    page => page.SortOrder == ++currentPage.SortOrder); 

currentPage का मूल्य रिक्त है।

लेकिन इसके साथ ही तर्क है, जब मैं एक पूर्णांक चर के लिए वृद्धि मान असाइन करें, और उसके बाद currentPage

int sortOrder = ++currentPage.SortOrder; 
currentPage = metadataResponse.ApplicationType.Pages.Find(
    page => page.SortOrder == sortOrder); 

currentPage आबादी वाले हो जाता है प्राप्त करने की कोशिश।

क्या किसी के पास कोई अच्छा जवाब है कि कोई काम क्यों करता है और दूसरा नहीं करता है?

+5

वे बराबर, सरल नहीं हैं। स्पष्ट रूप से लैम्ब्डा का मूल्यांकन कई बार किया जा रहा है (मुझे नहीं पता कि 'ढूंढें()' विधि क्या है) और वर्तमान पृष्ठ के सॉर्ट ऑर्डर को कई बार बदल रहा है। –

+5

प्रश्नों में दुष्प्रभावों के साथ लैम्ब्डा अभिव्यक्ति से बचें। –

उत्तर

6

नोट: मुझे मानते हैं कि Find विधि मानों के संग्रह पर लागू होती है।

पहले कोड उदाहरण में, आप अपने संग्रह में प्रत्येक तत्व के लिए currentPage बढ़ा रहे हैं (ऐसा इसलिए हो रहा है क्योंकि लैम्ब्डा अभिव्यक्ति बाहरी दायरे से प्राप्त चर पर बंद होने का परिचय देती है - इसके बारे में अधिक जानकारी के लिए नीचे कोड ब्लॉक देखें)। दूसरे कोड उदाहरण में, currentPage केवल एक बार बढ़ी है। एक नजर डालें कैसे निम्नलिखित कार्यक्रम बर्ताव करता है:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Func1(); 
     Console.WriteLine("\n"); 
     Func2(); 

     Console.ReadKey(); 
    } 

    private static void Func1() 
    { 
     int i = 0; 
     var list = new List<int> { 1, 2, 3 }; 
     list.ForEach(x => Console.WriteLine(++i)); 
    } 

    private static void Func2() 
    { 
     int i = 0; 
     int j = ++i; 
     var list = new List<int> { 1, 2, 3 }; 
     list.ForEach(x => Console.WriteLine(j)); 
    } 
} 

Here लैम्ब्डा भाव में बंद बारे में कुछ और जानकारी है। मज़े करो! ;-)

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