c# - Lambda expression gives error while sending parameters while creating a new Task -
मैंने निम्न कोड लिखा है:
int n1 = 5 कार्य & lt; int & gt; MyTask = नया कार्य & lt; int & gt; (n1 = & gt; बीबी। मल्टीप्लीनम्बर टाइम्स 2 (एन 1)); myTask.Wait (); कंसोल.प्रकाश रेखा ("परिणाम है" + myTask.Result.ToString ()); मैं इसे क्या करना चाहता हूं, इसके बारे में कोड विवरण:
मुझे यह उम्मीद थी कि माई टास्क नामक एक नई कार्य शुरू होगी, जो एन 1 चर चर को स्वीकार करेगा और यह, यह lib.MultipleNumerTimes2 विधि चलाएगा। फिर इसे पूरा करने के लिए इंतजार करने के बाद, मैं कार्य परिणाम को स्क्रीन पर मेरे टास्क के साथ मुद्रित करूंगा। रिस्पॉटल स्टेटमेंट।
लेकिन दृश्य स्टूडियो मेरे ऊपर दिए गए कोड की पंक्ति 2 पर एक त्रुटि दिखाता है, गोटो से पहले n1 को रेखांकित करता है ऑपरेटर (= & gt;) कह रहा है:
इस संदर्भ में 'n1' नामक एक स्थानीय चर घोषित नहीं किया जा सकता, क्योंकि यह 'n1' के लिए एक अलग अर्थ देगा जो पहले से ही ' माता-पिता या वर्तमान 'गुंजाइश, कुछ और को निरूपित करने के लिए
मैं यह अपने लैम्ब्डा अभिव्यक्ति सींतक्स में एक गलती लगा रहा हूं जो मुझे अभी तक नहीं समझा जा सकता है। लैम्ब्डा एक्सप्रेशन की तरह घोषित नहीं हैं: पैरामीटर = & gt; अभिव्यक्ति? मुझे पता है कि मैं एक अज्ञात अभिव्यक्ति की घोषणा कर रहा हूं, जिसे मैं एक चर वैरिएबल देना नहीं चाहता, और फिर = & gt; ऑपरेटर एक फ़ंक्शन चलाने के लिए उसी वैरिएबल का उपयोग करता है, लेकिन विजुअल स्टूडियो सोचता है कि मैं एक नया एन 1 वैरिएबल घोषित करने की कोशिश कर रहा हूं जब वास्तव में मैं इसे एक पैरामीटर के रूप में इस्तेमाल करना चाहता हूं साथ ही, कोड के साथ गड़बड़ करते समय मुझे यह हल करने के लिए 2 लाइन बदलते देखा गया है:
कार्य & lt; int & gt; MyTask = नया कार्य & lt; int & gt; ((=) = & gt; बीबी। मल्टीप्लेन्यूमर टाइम्स 2 (एन 1)); मुझे पता है कि मैं इसे इस तरह छोड़ सकता हूं, लेकिन मैं जानना चाहूंगा कि मेरे लैम्ब्डा अभिव्यक्ति में क्या गलत है, यह मुझे किसी भी एपरेमैटर भेजने नहीं देगी
संकलन त्रुटि कहती है कि आप गलत क्या कर रहे हैं - आप नाम का उपयोग करने की कोशिश कर रहे हैं n1 दो अलग अलग चीजों के लिए आपके पास यहां एक स्थानीय चरखी है: int n1 = 5; ... और फिर आप भी अपने लैम्ब्डा अभिव्यक्ति पैरामीटर नाम का उपयोग करने की कोशिश कर रहे हैं। आपको एक अलग पैरामीटर नाम का उपयोग करने की आवश्यकता है ... या बस अपने वर्तमान दृष्टिकोण का उपयोग करें जो n1 को कैप्चर करता है और इसमें कोई पैरामीटर नहीं है। ध्यान दें कि कोई अतिरिक्त भार नहीं है कार्य & lt; TResult & gt; कन्स्ट्रक्टर जो Func & lt; T, TResult & gt; को स्वीकार करते हैं, इसलिए भी बस नाम बदलने से काम नहीं करेगा: < / P> <पूर्व> नया कार्य & lt; int & gt; (foo = & gt; lib.MultiplyNumerTimes2 (foo)); लेकिन यह, जैसा कि यह एक Func & lt; ऑब्जेक्ट, ट्रेशल्ट & gt; स्वीकार करने वाला तरीका कॉल करता है, और फिर पैरामीटर के लिए प्रासंगिक मान प्रदान करता है। < पूर्व> नया कार्य & lt; int & gt; (foo = & gt; lib.MultiplyNumerTimes2 ((int) foo), n1); कलाकारों को ध्यान दें, जैसा कि foo के प्रकार के रूप में हो, केवल वस्तु होगा।
Comments
Post a Comment