2012-12-10 33 views
12

मैं सक्षम होने के लिए चाहते हैं निम्न कार्य करें:फ़ंक्शन <> उन पैरामीटर के बिना डिफ़ॉल्ट मानों के साथ एक विधि असाइन करें?

Func<int,bool> tryMethodFunc = TryMethod; 

कहाँ TryMethod की तरह एक हस्ताक्षर है:

bool TryMethod(int value, int value2 = 0, double value3 = 100.0) 

मैं एक curried प्रारूप में विधि को तोड़ने के लिए विरोध नहीं कर रहा हूँ लेकिन यह है कि यदि इसके बिना ऐसा करने का कोई तरीका है तो अधिक काम होगा।

+5

बस मुझे समझ में आता है कि 'Func tryMethodFunc => (value) => TryMethod (value) 'पर्याप्त नहीं है? –

+1

हम्म, यह काम करता है। मान लीजिए कि मैं कार्यात्मक दृष्टिकोण के लिए बस नया हूं। आप रख सकते हैं कि एक उत्तर के रूप में और मैं इसे चिह्नित करूंगा। – Firestrand

+1

केयान के जवाब को चिह्नित करने के लिए स्वतंत्र महसूस करें; यह बहुत व्यापक है और इसमें मेरा कामकाज शामिल है। –

उत्तर

8

वैकल्पिक पैरामीटर एक भाषा सुविधा है, संकलक मूल्यों के साथ पूर्ण कॉल के लिए वैकल्पिक पैरामीटर के साथ विधियों को कॉल करने के लिए कॉल का अनुवाद करने के लिए ज़िम्मेदार है। नीचे दिए गए कोड के इस सरल टुकड़ा पर

देखो,

public void GeneralMethod() 
    { 
     TestMethod(6); 
    } 

    public bool TestMethod(int a, int b = 8) 
    { 
     return true; 
    } 

जब आप इन तरीकों एकत्रित न, आप पाएंगे कि सी # संकलक वास्तव में दोनों मानकों के साथ एक फोन करने के लिए एक पैरामीटर के साथ TestMethod करने के लिए कॉल की जगह देखेंगे। ILDASM से स्क्रीन शॉट साबित होता है कि,

ildasm screen shot

अब, वर्तमान समस्या के लिए आ रहा है, सवाल में कोड की पंक्ति एक विधि वैकल्पिक पैरामीटर है कि के साथ एक समारोह बाध्य करने के लिए कोशिश कर रहा है। यदि सी # कंपाइलर को इसे संभालना है, तो यह सुनिश्चित करना होगा कि Func कुछ डिफ़ॉल्ट मानों को जानता है। हालांकि यह कंपाइलर द्वारा हासिल किया जा सकता था, यह Func के उद्देश्य को पूरी तरह से हरा देता है।

Func का उद्देश्य सामान्यीकृत और सरल तरीके से अनाम विधियों को संग्रहीत करने का एक तरीका प्रदान करना है। "reference

stackoverflow में एक और इसी तरह के सवाल पाया जा सकता है here

@Chris सिंक्लेयर के समाधान एक गुमनाम विधि है कि एक पैरामीटर लेता है और इस अनाम विधि के शरीर से TryMethod कॉल बनाने के द्वारा इस के आसपास काम करता है।