2009-07-28 29 views
13

अगर मुझे नौसिखिया चिल्लाती है तो मुझे माफ़ कर दो लेकिन => क्या सी # में है? मैं पिछले हफ्ते एक प्रेजेंटेशन में था और इस ऑपरेटर (मुझे लगता है) ओआरएम के संदर्भ में इस्तेमाल किया गया था। जब तक मैं अपने नोट्स पर वापस नहीं जाता तब तक मैं वास्तव में वाक्यविन्यास के विनिर्देशों पर ध्यान नहीं दे रहा था।"=>" का क्या अर्थ है?

+0

यह डुप्लिकेट है। मुझे वह नहीं मिल रहा है जो एक है। –

+0

यद्यपि खोजना बहुत मुश्किल है। यहां तक ​​कि Google पर भी। –

+0

उसे नहीं पता था कि इसे "लैम्ब्डा ऑपरेटर" कहा जाता था। –

उत्तर

13

सी # lambda operator में लिखा है "=>" (आम तौर पर उच्चारण " को जाता है" जब जोर से पढ़ें)। इसका मतलब है कि बाईं तरफ के तर्क दाएं कोने ब्लॉक (लैम्ब्डा फ़ंक्शन/अज्ञात प्रतिनिधि) में पास किए जाते हैं।

तो यदि आपके पास एक फनक या एक्शन (या अधिक प्रकार के पैरामीटर वाले उनके चचेरे भाई) हैं तो आप एक प्रतिनिधि को तत्काल करने या स्थगित प्रसंस्करण के लिए एक अलग विधि की आवश्यकता के बजाय उन्हें एक लैम्ब्डा अभिव्यक्ति असाइन कर सकते हैं:

//creates a Func that can be called later 
Func<int,bool> f = i => i <= 10; 
//calls the function with 12 substituted as the parameter 
bool ret = f(12); 
+4

मैंने कभी नहीं देखा कि जब आप लैम्ब्डा को 'कम या बराबर' के साथ चिपकते हैं तो यह कितना भ्रमित होता है। यह मेरे ऊपर इशारा करते हुए सभी तीरों की तरह दिखता है। –

1

यह एक लैम्ब्डा ऑपरेटर है, lambda expression का हिस्सा है।

सभी लैम्ब्डा भाव लैम्ब्डा ऑपरेटर => है, जो पढ़ने के लिए है "चला जाता है करने के लिए" के रूप में इस्तेमाल करते हैं। लैम्ब्डा ऑपरेटर का बायां तरफ इनपुट पैरामीटर (यदि कोई है) निर्दिष्ट करता है और दाईं ओर अभिव्यक्ति या कथन ब्लॉक रखता है। लैम्ब्डा अभिव्यक्ति x => x * x पढ़ा जाता है "x x x x x पर जाता है।"

7

lambda घोषित करने के लिए यह शॉर्टेंड है।

delegate(int i) 
{ 
    i++; 
} 

के संदर्भ में:

void DoSomething(Action<int> doSomething) 
{ 
    doSomething(1); 
} 

DoSomething(delegate(int i) { i++; }); 
//declares an anonymous method 
//and passes it to DoSomething 

जो (एक तरह से) है लेखन के रूप में ही:

i => i++ 

(एक तरह से) लेखन रूप में ही है

void increment(int i) 
{ 
    i++; 
} 

बस इसे नाम देने के बिना, यह आपको अनुमति देता है ऑनलाइन फ़ंक्शन घोषित करें, जिसे "अज्ञात" फ़ंक्शन के रूप में जाना जाता है।

3

जब जोर से कहा गया कि ऑपरेटर लैम्ब्डा है ( पर जाता है) ऑपरेटर जो लैम्बडा में परिभाषित अज्ञात प्रतिनिधि को परिभाषित करने में मदद करता है।

यह देखने के लिए एक आम जगह एक ईवेंट हैंडलर के साथ है। एक का उपयोग करके

this.Loaded += (o, e) => { 

// code 

} 

आप एक विधि लोडेड घटना से निपटने गुमनाम रूप से परिभाषित किया है (यह एक नाम नहीं है): आप अक्सर आ पृष्ठ लोड प्रकार घटना है कि निम्नलिखित कोड के साथ एक लैम्ब्डा द्वारा नियंत्रित किया जाता होगा लैम्ब्डा अभिव्यक्ति। यह "ओ, ई जाता है ... foo के साथ विधि परिभाषा।"

1

यह एक अज्ञात फ़ंक्शन घोषित करने के लिए वाक्यविन्यास है, जिसे सी # में "लैम्ब्डा अभिव्यक्ति" के रूप में जाना जाता है।

उदाहरण के लिए, (int p) => p * 2 एक फ़ंक्शन का प्रतिनिधित्व करता है जो एक पूर्णांक लेता है और इसे दो से गुणा करता है।

+0

तकनीकी रूप से, पूरे शरीर (int पी) => पी * 2 एक लैम्ब्डा अभिव्यक्ति है। => सिर्फ लैम्ब्डा ऑपरेटर है। –

3

यह "लैम्ब्डा ऑपरेटर" है, और आप इसे "चला जाता है" के रूप में पढ़ते हैं। आप बयान था कहते हैं:

doSomething(x => x + " hi"); 

आप बदल सकते हैं "=>" आपके मन में इस के साथ:

doSomething(delegate (string x) { return x + " hi" }); 

आप देख सकते हैं, यह एक आशुलिपि की एक बिल्ली प्रदान करता है। कंपाइलर आपके द्वारा पारित होने वाले चर के प्रकार को चित्रित करता है, और आपको उस हस्ताक्षर चर के पारित होने वाले कोड के लिए फ़ंक्शन हस्ताक्षर और ब्रैकेटिंग से छुटकारा पाने की अनुमति देता है।

+1

आप इसे "बनने" या "मानचित्र" के रूप में भी पढ़ सकते हैं –

+1

मैंने सुना है "इंजेक्शन", "तीर", कुछ अश्लील मैं यहां उल्लेख नहीं करूँगा, और कुछ अन्य। मेरा पसंदीदा अब तक "अधिक से अधिक बराबर" है। – womp

+2

मैं अनगिनत संभावित विविधताओं के बारे में चिंता करने की बजाय अब "लैम्ब्डा" कहता हूं। –

8

के बाद से कोई भी नहीं फिर भी यह उल्लेख किया है, VB.NET में आप के बजाय समारोह कीवर्ड =>, इसलिए की तरह उपयोग कर सकेंगे:

dim func = function() true 
'or 
dim func1 = function(x, y) x + y 

dim result = func() ' result is True 
dim result1 = func1(5, 2) ' result is 7 
+1

मुझे किसी कारण से फिर से मतदान नहीं मिलता है। जिस व्यक्ति ने सवाल पूछा वह कहा कि वह एक वीबी.नेट लड़का है, इसलिए वीबी.नेट के संदर्भ में स्पष्टीकरण की पेशकश समझ में आता है। –

+0

आपने अपने विशिष्ट प्रश्न का उत्तर नहीं दिया, लेकिन मुझे नहीं पता कि उसे जानकारी का एक टुकड़ा क्यों दे रहा है जो उसे बेहतर तरीके से जोड़ने में मदद कर सकता है, वह एक डाउनवोट वारंट करेगा। इसे अस्वीकार करने के लिए +1। – Brandon

+0

+1, मैं भी यह जवाब जोड़ने वाला था ... पागल है कि कोई इसे कम करेगा, वीबी.नेट लड़के के लिए जानना बहुत उपयोगी है ... –

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