2012-10-10 10 views
30

निम्नलिखित कोड देखें उत्पन्न। विधि 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

संपादित इस बग अब तय हो गई है।

+1

आपका कोड मेरे लिए काम करता है। सी #/नेट/विजुअल स्टूडियो का कौन सा संस्करण आप उपयोग कर रहे हैं? आप किस प्लेटफॉर्म को लक्षित कर रहे हैं? – jeroenh

+0

@ जेरोहेन: सी # 4.5 वीएस2012। –

+0

मैंने वीएस -2010, सी # 4 और 3.5 के साथ प्रयास किया। अभी 2012 तक पहुंच नहीं है लेकिन निश्चित रूप से आज रात कोशिश करनी होगी। – jeroenh

उत्तर

3

यह एक बग के रूप में की पुष्टि की है और now fixed

अद्यतन: कनेक्ट लेख अब मौजूद नहीं है। बग तय किया गया है।

+1

करुणा हम कभी नहीं जान पाएंगे कि यह कब तक पहुंच जाएगा। माइक्रोसॉफ्ट वास्तव में उस साइट पर बेहतर संवाद करना चाहिए ... – leppie

1

पहले - यह एक सही तरीका है कि इसे कैसे ठीक किया जाए, लेकिन शायद आपके प्रश्न का उत्तर नहीं है। (लेकिन टिप्पणी नहीं है कोड formating है)

मेरा मानना ​​है कि यह इस के समान है: Outer Variable Trap, क्योंकि आप एक चर के रूप में फू() विधि का उपयोग कर रहे हैं और वहाँ नेट

में एक बग (या शायद एक फीचर) है

मैं इस

public void Bang() 
{ 
    Action baseMethod = base.Foo<string>; 
    Action bang = new Action(delegate { baseMethod(); }); 
    bang(); //VerificationException is thrown 
} 

को बैंग() पद्धति को बदलने की कोशिश की है और यह काम करता है और परिणाम "आधार"

मुझे आशा है कि यह एक छोटा सा मदद करता है।

+0

एफवाईआई, टिप्पणियां * क्या * कोड स्वरूपण है, आप बस लाइन ब्रेक शामिल नहीं कर सकते हैं और अभी भी वर्णों की कुल संख्या (जिसमें मार्कडाउन शामिल है) द्वारा सीमित हैं –

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