2010-10-13 15 views
19

मेरी रुचि है अगर यह एक कोड इस जावास्क्रिप्ट एक के अनुरूप लिखने के लिए सी # का उपयोग कर सकता है:सी # में अज्ञात फ़ंक्शन कैसे कॉल करें?

var v = (function() 
{ 
    return "some value"; 
})() 

सबसे मैं प्राप्त कर सकते है:

Func<string> vf =() => 
{ 
    return "some value"; 
}; 

var v = vf(); 

लेकिन मैं कुछ इस तरह थे:

// Gives error CS0149: Method name expected 
var v = (() => 
{ 
    return "some value"; 
})(); 

क्या इसे अज्ञात छोड़ने वाले फ़ंक्शन को कॉल करने का कोई तरीका है?

+1

क्या आप कह सकते हैं कि आप कोड के साथ क्या करना चाहते हैं? वांछित इनपुट और आउटपुट क्या है? –

+5

@ अहमद: प्रश्न पूरी तरह से स्पष्ट और स्पष्ट है। – Timwi

+0

क्या आप समझा सकते हैं कि आप ऐसा क्यों करना चाहते हैं? अज्ञात फ़ंक्शन को परिभाषित करने के लिए सभी rigamarole के माध्यम से क्यों जाएं और जब आप केवल अज्ञात फ़ंक्शन के शरीर को रख सकें * ठीक उसी समय * और कोड चलाते समय इसे लागू किया जाएगा? –

उत्तर

30

हां, लेकिन सी # स्थिर रूप से टाइप किया गया है, इसलिए आपको एक प्रतिनिधि प्रकार निर्दिष्ट करने की आवश्यकता है।

उदाहरण के लिए

, निर्माता सिंटैक्स का उपयोग:

var v = new Func<string>(() => 
{ 
    return "some value"; 
})(); 

// shorter version 
var v = new Func<string>(() => "some value")(); 

... या डाली वाक्य रचना है, जो भी कई कोष्ठकों :)

var v = ((Func<string>) (() => 
{ 
    return "some value"; 
}))(); 

// shorter version 
var v = ((Func<string>)(() => "some value"))(); 
+3

यह बहुत अच्छा है ... :) – RameshVel

+0

बहुत बहुत धन्यवाद! मुझे खुद का अनुमान लगाना चाहिए। –

+2

आपके उत्तर को 8 मिनट में स्वीकार करेगा। :) –

0

तरीका यहां बताया गया तो उपयोग कर सकता है के साथ गन्दा प्राप्त कर सकते हैं संदर्भ को संलग्न करने के लिए ऐसा निर्माण - बंद करें-

Control.Click += new Func<string, EventHandler>((x) => 
new System.EventHandler(delegate(object sender, EventArgs e) 
{ 

}))(valueForX); 
+1

यह आपकी आवश्यकता से अधिक तरीका कर रहा है। – Servy

+1

एक फ़ंक्शन का अपमानजनक, अनावश्यक आमंत्रण जिसे फ़ंक्शन होने की आवश्यकता नहीं है। ऐसा लगता है जैसे आप जेएस पृष्ठभूमि से आ रहे हैं; यह केवल जेएस में जरूरी है क्योंकि जेएस में चर को पूरे फंक्शन पर स्कॉप्ड किया जाता है। सी # में उचित सही स्कोपिंग है, इसलिए यह आवश्यक नहीं है। – Timwi

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