2013-04-30 9 views
52

मैं इस पर Invoke() का उपयोग कर सीधे एक Func को कॉल करने के बीच अंतर के बारे में उत्सुक हूं। क्या कोई अंतर है? क्या पहली, वाक्य रचनात्मक चीनी है, और किसी भी तरह से नीचे कॉल() कॉल करें?Func <T>() बनाम Func <T> इंकवोक()

public T DoWork<T>(Func<T> method) 
{ 
    return (T)method.Invoke(); 
} 

public T DoWork<T>(Func<T> method) 
{ 
    return (T)method(); 
} 

बनाम या मैं पूरी तरह से गलत ट्रैक :) धन्यवाद पर कर रहा हूँ।

+0

http://social.msdn.microsoft.com/Forums/en- कर सकते हैं यूएस/csharplanguage/धागा/f629c34d-6523-433a-90b3-bb5d445c5587 –

उत्तर

67

कोई फर्क नहीं पड़ता। दूसरा संकलक द्वारा प्रदत्त के लिए सिर्फ एक शॉर्टेंड है। वे एक ही आईएल को संकलित करते हैं।

+0

धन्यवाद, जॉन। मैंने सोचा कि यह मामला था। – Tris

+0

आमंत्रण छोड़ने() विधि बंद करने के परिणामस्वरूप संकलक त्रुटि होती है: "विधि को पूर्ण रूप से परिवर्तित नहीं कर सकता" System.Func 'to' T '"। मैं .NET 4. – Mike

+1

@ माइक के खिलाफ संकलित कर रहा हूं: ऐसा होगा यदि आप * ब्रैकेट * को भी याद करेंगे - यानी '(टी) विधि()' के बजाय '(टी) विधि 'वापस करने का प्रयास किया। –

2

आह्वान नई सी # 6 अशक्त प्रचार ऑपरेटर के साथ अच्छी तरह से काम करता है, अब यू

T result = method?.Invoke(); 
बजाय

T result = method != null ? method() : null; 
+0

क्या आप एक ऐसे परिदृश्य को चित्रित कर सकते हैं जहां यह उपयोगी है? पाठ्यपुस्तक का मामला घटनाओं को बढ़ा रहा है। – Gusdor

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