में MethodCallExpression से विधि को कैसे कॉल करें मेरे पास एक विधि कॉल अभिव्यक्ति है और विधि को आमंत्रित करने का प्रयास करें। मैंने एक रास्ता निकाला, लेकिन मुझे पैरामीटर मानों को पुनः प्राप्त करने में समस्याएं हैं क्योंकि प्रत्येक तर्क को कॉन्स्टेंटएक्सप्रेस के साथ वर्णित नहीं किया गया है।सी #
Expression<Action<T>> = t => t.DoSomething(Par0, Par1, Par2);
MethodCallExpression methodCallExpression = selector.Body
as MethodCallExpression;
// get the information which is needed to invoke the method from the provided
// lambda expression.
MethodInfo methodInfo = methodCallExpression.Method;
object[] arguments = methodCallExpression.Arguments.OfType<ConstantExpression>()
.Select(p => p.Value).ToArray();
// invoke the expression on every item within the enumerable
foreach (TSource item in source)
{
methodInfo.Invoke(item, arguments);
}
साथ ही, मैं विधि आह्वान करने के लिए कुछ अन्य तरीकों से देखा है, अब मुझे यकीन है कि क्या यह करने के लिए सही तरीका है नहीं कर रहा हूँ।
var func = expression.Compile();
var success = func.Invoke();
तो मेरे सवाल का, मैं कैसे methodCallExpression.Arguments
से विधि तर्क मान प्राप्त कर सकते हैं कर रहा है?
या मेरे लक्ष्य को प्राप्त करने का कोई आसान तरीका है?
धन्यवाद, यह बहुत आसान है। मैं इसे इस तरह कर रहा हूं: // आवेदक के लिए प्रतिनिधि प्राप्त करने के लिए लैम्ब्डा अभिव्यक्ति संकलित करें। एक्शन एक्शन = selector.Compile(); // संख्या foreach (स्रोत में टीएसओएस आइटम) { कार्रवाई (आइटम) के भीतर प्रत्येक आइटम पर अभिव्यक्ति का आह्वान करें; } और अंततः मुझे इस मुद्दे के लिए एमएसडीएन दस्तावेज भी मिला: http://msdn.microsoft.com/en-us/library/bb882536.aspx –
Enyra
क्या कोई कारण नहीं है कि आप केवल 'चयनकर्ता' नहीं कर सकते हैं। कॉम्पाइल()() '? ब्रांड्स काम करते समय 'Invoke' या 'DynamicInvoke' क्यों? – ErikE