मुझे उम्मीद है कि मैंने अपने प्रश्न का शीर्षक उचित रूप से लिखा है।सी # इनलाइन अज्ञात लैम्बडा या प्रतिनिधियों का उपयोग क्यों नहीं कर सकता?
ग # मैं (प्रतिनिधियों के रूप में) lambdas उपयोग कर सकते हैं, या यह करने के लिए बड़े प्रतिनिधि वाक्य रचना में:
Func<string> fnHello =() => "hello";
Console.WriteLine(fnHello());
Func<string> fnHello2 = delegate()
{
return "hello 2";
};
Console.WriteLine(fnHello2());
तो क्यों मैं "इनलाइन" लैम्ब्डा या प्रतिनिधि शरीर, और से बचने पर कब्जा नहीं कर सकते यह एक नामित चर (इसे अनाम बनाते हुए) में?
// Inline anonymous lambda not allowed
Console.WriteLine(
(() => "hello inline lambda")()
);
// Inline anonymous delegate not allowed
Console.WriteLine(
(delegate() { return "hello inline delegate"; })()
);
एक उदाहरण है कि जावास्क्रिप्ट (सिर्फ तुलना के लिए) में काम करता है:
alert(
(function(){ return "hello inline anonymous function from javascript"; })()
);
कौन सा उम्मीद चेतावनी बॉक्स पैदा करता है।
अद्यतन: ऐसा लगता है कि आप यह कर सकते हैं सी # में एक इनलाइन गुमनाम लैम्ब्डा है, यदि आप उचित रूप से डाली, लेकिन() के शुरू होने से इसमें लगाई अनियंत्रित बनाने के लिए।
// Inline anonymous lambda with appropriate cast IS allowed
Console.WriteLine(
((Func<string>)(() => "hello inline anonymous lambda"))()
);
शायद संकलक गुमनाम प्रतिनिधि के sig अनुमान नहीं लगा सकता पता करने के लिए जो Console.WriteLine() आप कॉल करने के लिए कोशिश कर रहे हैं? क्या किसी को पता है कि इस विशिष्ट कलाकार की आवश्यकता क्यों है?
इस पर विचार करें: 'सार्वजनिक स्थैतिक आर इवल (Func मीटर) {वापसी एम();} '। फिर आप 'Eval (() => {वापसी "परीक्षण";}) कह सकते हैं' जो थोड़ा अच्छा है, या यहां तक कि 'Eval (() => {वापसी "परीक्षण";}) '। –
Ben