निम्नलिखित कोड देखें उत्पन्न। विधि Bang
के उत्पन्न सीआईएल के अंदर मुझे मिल गया:संकलक गुमनाम तरीकों के लिए गलत कोड [एमएस बग ठीक]
call instance void ConsoleApp.Derived::'<>n__FabricatedMethod1'<string>()
और संकलक उत्पन्न विधि के हस्ताक्षर:
method private hidebysig
instance void '<>n__FabricatedMethod1'<T>() cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = (
01 00 00 00
)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void ConsoleApp.Base::Foo<!!T>()
IL_0006: ret
}
मुझे लगता है कि सही कोड '<>n__FabricatedMethod1'<class T>
होना चाहिए। क्या यह एक बग है? वैसे, delegate{ }
(लैम्ब्डा अभिव्यक्ति समान है) का उपयोग किए बिना, कोड सिंटैक्स शर्करा के साथ ठीक काम करता है।
Action good = new Action(base.Foo<string>());
good(); //fine
संपादित मैं windows8 आरटीएम में VS2012 RTMRel उपयोग कर रहा हूँ, .नेट फ्रेमवर्क 4,5
संपादित इस बग अब तय हो गई है।
आपका कोड मेरे लिए काम करता है। सी #/नेट/विजुअल स्टूडियो का कौन सा संस्करण आप उपयोग कर रहे हैं? आप किस प्लेटफॉर्म को लक्षित कर रहे हैं? – jeroenh
@ जेरोहेन: सी # 4.5 वीएस2012। –
मैंने वीएस -2010, सी # 4 और 3.5 के साथ प्रयास किया। अभी 2012 तक पहुंच नहीं है लेकिन निश्चित रूप से आज रात कोशिश करनी होगी। – jeroenh