(int a) => a
जैसे लैम्ब्डा किसी भी प्रतिनिधि को फिट करेगा जो int
लेता है और int
देता है। Func<int,int>
केवल एक उदाहरण है, और आप आसानी से delegate int Foo(int x);
के साथ खुद को घोषित कर सकते हैं। वास्तव में यह लैम्ब्डा अभिव्यक्ति एक प्रतिनिधि को भी फिट करेगी जो int
लेती है और double
लौटाती है, क्योंकि लैम्ब्डा (a
) का परिणाम double
पर स्पष्ट रूप से परिवर्तनीय है।
लैम्ब्डा को सभी प्रतिनिधि प्रकारों के लिए असाइन करने योग्य होने के लिए, यह लैम्बडा स्वयं स्वाभाविक रूप से एक प्रकार नहीं है। इसके बजाए यह उस प्रतिनिधि के प्रकार को लेता है जिसका आप इसका उपयोग कर रहे हैं, जब तक यह संभव हो। ((int a) => a
निश्चित रूप से Func<byte, byte>
करने के लिए आवंटित नहीं किया जा सकता।)
जबकि दोनों Func<int, int>
और Foo
प्रतिनिधि मैं परिभाषित निश्चित रूप से कर सकते हैं Delegate
लिए परिवर्तित किया जा, एक लैम्ब्डा सीधे Delegate
में परिवर्तित नहीं किया जा सकता क्योंकि यह स्पष्ट नहीं है क्या इसकी वास्तविक तब हस्ताक्षर होगा। Delegate d = (int a) => a
के बाद, d
Foo
, या Func<int, int>
, या यहां तक कि Func<int, double>
? सभी मान्य संभावनाएं हैं, और संकलक को पता नहीं है कि आप क्या चाहते हैं। यह सबसे अच्छा अनुमान लगा सकता है, लेकिन सी # ऐसी भाषा नहीं है जो उस तरह का अनुमान लगाती है। यही कारण है कि आप var = (int a) => a
जैसे कुछ नहीं कर सकते हैं।
मुझे लगता है कि त्रुटि संदेश संकलक Delegate d = (int a) => a;
के लिए देता है करना बहुत स्पष्ट नहीं है:
Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type
Intuitively आपको लगता होगा Delegate
एक प्रतिनिधि प्रकार है, लेकिन है कि कैसे चीजें काम नहीं है। :)
Fyi, जब भी कुछ संकलन करने में विफल रहता है, तो त्रुटि संदेश को भी पढ़ें (और पोस्ट करें)। –
@SharePoint न्यूबी: कृपया मेरी अपडेट की गई पोस्ट देखें। इससे अब आपकी त्रुटि हल होनी चाहिए। – Noldorin