सिद्धांत रूप में होना चाहिए, Vlad से जवाब सही है और आप के रूप में लैम्ब्डा समारोह की घोषणा करने की जरूरत नहीं है अग्रिम में एक प्रतिनिधि।
छोड़कर, स्थिति, सी # में के रूप में सरल नहीं है क्योंकि संकलक तय नहीं कर सकता कि क्या वाक्य-लैम्ब्डा अभिव्यक्ति भी एक प्रतिनिधि (जैसे Func<int>
) या एक अभिव्यक्ति पेड़ (जैसे Expression<Func<int>>
) के रूप में संकलित और किया जाना चाहिए, यह किसी भी किया जा सकता है अन्य संगत प्रतिनिधि प्रकार।
: - सी # संकलक स्वचालित रूप से प्रतिनिधि प्रकार का अनुमान लगा होगा
int foo = new Func<int>(() => {
Console.WriteLine("bar"); return 1; })();
आप एक विधि है कि, प्रतिनिधि के रिटर्न को परिभाषित करने और फिर बुला विधि द्वारा कोड थोड़ा आसान बनाने में कर सकते हैं: तो, आप प्रतिनिधि बनाने की जरूरत
static Func<R> Scope<R>(Func<R> f) { return f; }
// Compiler automatically compiles lambda function
// as delegate and infers the type arguments of 'Scope'
int foo = Scope(() => { Console.WriteLine("bar"); return 1; })();
मैं मानता हूं कि यह एक बदसूरत चाल है जिसका उपयोग नहीं किया जाना चाहिए :-), लेकिन यह एक दिलचस्प तथ्य है कि यह किया जा सकता है!
स्रोत
2010-02-26 00:18:42
यह सही जवाब है - ने कहा, गंभीरता से ऐसा नहीं करने पर विचार करें। –
आप लोग वास्तव में यह जांचना चाहते हैं कि कोड मतदान करने से पहले संकलित करता है या नहीं। यह नहीं करता है। -1। – Aaronaught
हां, हां, 'printf' सी # में मौजूद नहीं है। लेकिन जवाब इसके बारे में नहीं है। – Vlad