2011-11-14 15 views
5

साथ मैं निम्न विधि है कि मैं सही सिंटैक्स को समझ नहीं सकता कॉल करने के लिए है:सी # कार्रवाई <> Func <> पैरामीटर

public T GetAndProcessDependants<C>(Func<object> aquire, 
    Action<IEnumerable<C>, Func<C, object>> dependencyAction) {} 

मैं इसे इस तरह कॉल करने के लिए कोशिश कर रहा हूँ:

var obj = MyClass.GetAndProcessDependants<int>(() => DateTime.Now, 
    (() => someList, (id) => { return DoSomething(x); }) } 

संपादित: सभी को थक्स, आप लोगों ने मेरे सिर में एक हल्का बल्ब चालू करने में मदद की। यहां मैंने किया है:

var obj = MyClass.GetAndProcessDependants<int>(
      () => DateTime.Now, 
      (list, f) => 
      { 
       list = someList; 
       f = id => { return DoSomething(id); }; 
      }); 

यह सुनिश्चित नहीं है कि मुझे इसके साथ कोई समस्या क्यों है। यह

उत्तर

2

के रूप में बस उपरोक्त विवरण को देख, एक सूची तर्क स्वीकार करने की जरूरत है, यह कॉल की तरह लग रहा होना चाहिए:

var obj = MyClass.GetAndProcessDependants<int>(() => DateTime.Now, 
    (seq, fun) => { /* do something with seq and fun */ }); 

कुंजी है जब से तुम एक Action गुजर रहे हैं जो Func लेता है, कॉलर (0 संभवतः) Func को Action में पारित करने वाला है। तो आप बस निर्दिष्ट करें कि Func को अनुक्रमित अनुक्रम पर लागू किया गया है (यदि मैं प्रोटोटाइप को सही तरीके से पढ़ रहा हूं)।

+0

इससे मुझे यह समझने में मदद मिली कि मैं क्या कर रहा था – emer

+0

@emer: मदद करने में खुशी हुई! –

3

आपका लैम्ब्डा वाक्य रचना पूरी तरह से गलत है उन दिनों मैं लगता है में से एक है ..

THX। अभी समारोह केवल एक ही तर्क स्वीकार कर रहा है दो के लिए जब यह पूछता है,

(list, id) => DoSomething(...) 
3

:

आप दो मापदंडों के साथ एक एकल लैम्ब्डा अभिव्यक्ति बनाने के लिए की जरूरत है!

आप इस तरह के (list, id) => {}

2
var obj = MyClass.GetAndProcessDependants<int>(
    () => DateTime.Now, 
    (someList, id) => DoSomething(x) 
); 
संबंधित मुद्दे