2010-10-06 12 views
5

मैं hereसी #/लैम्ब्डा: निम्नलिखित में परम क्या संदर्भित करता है?

/// <summary> 
/// Returns the command that, when invoked, attempts 
/// to remove this workspace from the user interface. 
/// </summary> 
public ICommand CloseCommand 
{ 
    get 
    { 
     if (_closeCommand == null) 
      _closeCommand = new RelayCommand(param => this.OnRequestClose()); 

     return _closeCommand; 
    } 
} 

क्या करता param => this.OnRequestClose() में param का उल्लेख से कोड तलाश में हूँ?

उत्तर

16

RelayCommand शायद एक प्रतिनिधि प्रकार है कि एक एकल पैरामीटर, या एक प्रकार है कि ही निर्माता में इस तरह के एक प्रतिनिधि के प्रकार लेता स्वीकार करता है। आपको गुमनाम विधि की घोषणा कर रहे हैं, बस और कहा कि "जब लागू, हम भेजे मूल्य ले लेंगे (लेकिन फिर इसका इस्तेमाल नहीं), और OnRequestClose फोन तुम भी (शायद स्पष्ट) हो सकता है:।

_closeCommand = new RelayCommand(delegate { this.OnRequestClose(); }); 

यह है । शायद अन्य उपयोगों जहां यह प्रयोग किया जाता है उदाहरण के लिए, में स्पष्ट:

var ordered = qry.OrderBy(item => item.SomeValue); 

जहां लैम्ब्डा है "एक item को देखते हुए प्राप्त item के SomeValue" आपके मामले में लैम्ब्डा "दिया जाता है param, उपेक्षा param ए nd फोन OnRequestClose() "

+0

यह एक अच्छा जवाब है, शायद स्पष्ट है कि यह स्पष्ट रूप से 'प्रतिनिधि (ऑब्जेक्ट पैराम) {this.OnRequestClose() के रूप में लिखा गया है; } ' – Dave

+0

@ डेव - नहीं, यह एक वाक्यविन्यास दिखाने के लिए एक बहुत ही जानबूझकर विकल्प था (आईएमओ) बहुत स्पष्ट ** जब आप तर्क का उपयोग नहीं करते **। मैं वास्तव में 'प्रतिनिधि (ऑब्जेक्ट पैराम) {...} ' –

+0

वरीयता में लैम्ब्डा संस्करण (मूल प्रश्न के अनुसार) का उपयोग करता हूं, मैं ऊपर से मेरी टिप्पणी से स्पष्ट रूप का उपयोग नहीं करता, मैंने बस इसका इरादा किया लैम्ब्डा रूप में 'परम' का अर्थ दिखाने के लिए एक स्पष्टीकरण उपकरण। – Dave

1

परम => this.OnRequestClose() है लैम्ब्डा

Func<sometype_that_param_is,sometype_that_OnRequestClose_Is> 

या कार्रवाई

मैं एक समारोह के लिए यकीन है कि जो

तो यह सिर्फ एक अभिव्यक्ति है नहीं कर रहा हूँ जिसे किसी चीज़ द्वारा बुलाया जाता है, जो एक तर्क पारित करेगा जो 'param' होगा, तब

1

कुछ भी नहीं। रेखा एक समारोह का प्रतिनिधित्व लैम्ब्डा अभिव्यक्ति को परिभाषित करती है। उस फ़ंक्शन में हस्ताक्षर होते हैं जैसे: Foo (T param) जहां टी कंसट्रेटर के तर्क के प्रकार के आधार पर कंपाइलर द्वारा प्रदान किया गया एक विशिष्ट प्रकार होगा।

1

परम अपने लैम्ब्डा अभिव्यक्ति की केवल पैरामीटर है (परम => this.OnRequestClose())

आप एक ICommand वस्तु instantiating कर रहे हैं, परम शायद पैरामीटर यूआई से इस ICommand के लिए पारित होते हैं। आपके मामले में, पैरामीटर का उपयोग कमांड में नहीं किया जाता है (यह लैम्ब्डा अभिव्यक्ति के दाहिने तरफ दिखाई नहीं देता है)।

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