मैं समझने की कोशिश कर रहा हूं कि विधि समूह को अभिव्यक्ति में परिवर्तित करने के लिए एक सरल वाक्यविन्यास है या नहीं। यह lambdas के साथ बहुत आसान लगता है, लेकिन यह तरीकों के अनुवाद नहीं करता है:अभिव्यक्ति के लिए विधि समूह को कनवर्ट करें
public delegate int FuncIntInt(int x);
को देखते हुए सभी को नीचे मान्य हैं:
Func<int, int> func1 = x => x;
FuncIntInt del1 = x => x;
Expression<Func<int, int>> funcExpr1 = x => x;
Expression<FuncIntInt> delExpr1 = x => x;
लेकिन अगर मैं एक साथ एक ही कोशिश उदाहरण विधि, यह अभिव्यक्तियों पर टूट जाती है:
Foo foo = new Foo();
Func<int, int> func2 = foo.AFuncIntInt;
FuncIntInt del2 = foo.AFuncIntInt;
Expression<Func<int, int>> funcExpr2 = foo.AFuncIntInt; // does not compile
Expression<FuncIntInt> delExpr2 = foo.AFuncIntInt; //does not compile
पिछले दोनों में से दोनों "सी गैर-प्रतिनिधि प्रकार 'System.Linq.Expressions.Expression < ...>' में कनवर्ट विधि समूह 'AFuncIntInt' कनवर्ट करें। आप विधि आह्वान करने का इरादा किया? "
तो वहाँ एक अभिव्यक्ति में एक विधि चल मैदान पर कब्जा करने के लिए एक अच्छा वाक्य रचना है?
धन्यवाद, आर्नी
दोह .. मुझे अब बेवकूफ लगता है। यह पूरी तरह से काम करता है। धन्यवाद –
क्या आपको कभी इस के लिए एक अच्छा सिंटैक्स मिला है? मैं पूरी तरह से समझ नहीं पा रहा हूं कि क्यों संकलक एक अभिव्यक्ति के विधि समूह को नहीं समझ सकता> जब यह इसे Func के लिए समझ सकता है .. –
skrebbel
मेरी धारणा यह है कि foo.AFuncIntInt एक विधि समूह नहीं है, अभिव्यक्ति नहीं और विधि समूह से अभिव्यक्ति तक कोई स्वचालित रूपांतरण नहीं है, हालांकि लैम्बडा को एक विधि समूह या अभिव्यक्ति के रूप में स्वीकार करने के लिए स्वचालित रूपांतरण होता है –