के रूप में अभिव्यक्ति स्वीकार करता है मैं .NET4.5
और C#
उपयोग कर रहा हूँ मैं विस्तार विधि बनाने अनुमान है कि मुझे वस्तु की संपत्ति पारित करने के लिए अनुमति होगी और यदि उस वस्तु की पहचान 0 है तो return null
अन्यथा कि संपत्ति के मूल्य वापसी।एक्सटेंशन विधि है कि अभिव्यक्ति <Func<T>> पैरामीटर
मैं इसे प्रतिबिंब के साथ कोई समस्या नहीं कर सकता था इसलिए इस प्रशिक्षण अभ्यास पर विचार करें और मैं वास्तविक समस्या को हल करने की कोशिश नहीं कर रहा हूं।
वर्तमान में विस्तार विधि static
कक्षा में बैठा है इस तरह लग रही:
public static object GetNullIfNotSet(this WillAnswer answer, Expression<Func<WillAnswer>> expression)
{
if (answer.Id == 0) return null;
return expression.Compile()();
}
तरह से मैं इसका इस्तेमाल करने में सक्षम होना चाहते है निम्नलिखित (उत्तर प्रकार WillAnswer
की है):
var emptyIfNewObject = answer.GetNullIfNotSet(o => o.HasBusinessAssets)
हालांकि यह मुझे संकलन त्रुटि देता है:
Error 1 Delegate 'System.Func' does not take 1 arguments C:\hg\Website\Areas\Wills\ViewModel\Answers.cs 38 59 Website
जो मुझे फहराता है क्योंकि मुझे नहीं लगता कि मैं कोई तर्क पारित कर रहा हूं (क्या मैं?)। कृपया मुझे समझाने की तुलना में किसी को समझदार हो सकता है कि मेरी कौन सी अपेक्षाएं गलत हैं।
बस अगर मैं स्पष्ट नहीं था तो मैं दोहरा दूंगा। मैं चाहता हूं कि var emptyIfNewObject = answer.GetNullIfNotSet(o => o.HasBusinessAssets)
पर कॉल करें और null
प्राप्त करें यदि Id
answer
0
है।
दूसरों के रूप में ने बताया है, आपको अभिव्यक्ति की आवश्यकता नहीं है। आपकी त्रुटि का स्रोत तथ्य यह है कि आपने अपना func गलत परिभाषित किया है।आप शायद कुछ Func <ऑब्जेक्ट, WillAnswer> (ऑब्जेक्ट रिटर्न प्रकार होने के साथ) चाहते हैं। –
इसे इस तरह से कॉल करें: 'answer.GetNullIfNotSet (() => (((Func) (() => answer.HasBusinessAssets))()));' क्या गड़बड़ है! haim770 के उत्तर पर वापस जाएं :-) –
यदि आपके पास उस ऑब्जेक्ट तक पहुंच है, जिस पर आप उस विधि को एक्सेस करते हैं जब आप विधि को कॉल करते हैं, जो आप करते हैं क्योंकि यह ऑब्जेक्ट पर एक एक्सटेंशन है, तो क्यों न केवल संपत्ति को पास करें एक 'Func'? – user2697817