एक अभिव्यक्ति ट्री में कॉल या आह्वान नहीं हो सकता है जो वैकल्पिक तर्कों का उपयोग करता है


145

एक अभिव्यक्ति ट्री में कॉल या आह्वान नहीं हो सकता है जो वैकल्पिक तर्कों का उपयोग करता है

return this.RedirectToAction<MerchantController>(x => x.Edit(merchantId));

जहां संपादन में एक दूसरा, अशांत तर्क था।

ऐसा क्यों है?

जवाबों:


106

अंतर्निहित अभिव्यक्ति पेड़ एपीआई वैकल्पिक तर्क का समर्थन नहीं करता।

IL- संकलित कोड के लिए C # संकलक डिफ़ॉल्ट मानों को संकलित समय (हार्ड-कोडेड) में सम्मिलित करता है, क्योंकि CLR वैकल्पिक तर्कों के साथ कॉलिंग विधियों का समर्थन नहीं करता है जब तर्क स्पष्ट रूप से प्रदान नहीं किए जाते हैं।


2
क्या यह किसी तरह ओवरलोड को शामिल करता है? ओवरलोड होने पर मुझे यह मिल रहा था। शून्य ब्लाह (स्ट्रिंग ए) और शून्य ब्लाह (वस्तु ए) जैसा कुछ। जब मैंने ऑब्जेक्ट के साथ संस्करण के लिए एक कॉल को बाहर करने की कोशिश की, तो इसने मुझे यह त्रुटि दी।
vbullinger

4
अधिभार पूरी तरह से इस अर्थ में समर्थित हैं कि एक विशेष अधिभार को पेड़ में कठोर-कोडित किया जाएगा।
मारी

1
सुंदर गुप्त त्रुटि संदेश, लेकिन इस उत्तर ने रास्ता दिखा दिया, मेरे पास वैकल्पिक पैरामीटर था जिसमें डिफ़ॉल्ट मान के साथ विधि का उपयोग करने की कोशिश की गई थी।
vpalmu

140

एक ही संदेश था जब कई डिफ़ॉल्ट मापदंडों के साथ एक विधि का उपयोग करने के लिए Mock.setup का उपयोग करने की कोशिश की जा रही थी। मुझे सिर्फ लैम्ब्डा में अतिरिक्त मापदंडों को जोड़ना था।

void someMethod(string arg1 = "", string arg2 = "")

mockedObject.Setup(x => x.someMethod(It.IsAny<string>(), It.IsAny<string>()))

1
इससे मुझे मदद मिली। मुझे याद आ रहा था It.IsAny<object>। मूल रूप से मैं के लिए एक पैरामीटर याद आ रही थीsomeMethod()
akasoggybunz

मुझे यह भी सुनिश्चित करना था कि मैं विधि में हर पैरामीटर के लिए मूल्य शामिल करूँ (विधि हस्ताक्षर में कई पैरामीटर होने के बावजूद डिफ़ॉल्ट मान सेट किए गए)।
स्लैशबर्न

1
उपयोग के मामले पर भी निर्भर करता है ... x.someMethod(default,default)... का उपयोग किया जा सकता है।
लॉसमनोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.