2012-10-10 25 views
30

aşağıdaki kodu bakınız oluşturulur. yöntemin Bang oluşturulan CIL İçinde aldım:Derleyici anonim yöntemleri için yanlış kod [SABİT MS HATA]

call instance void ConsoleApp.Derived::'<>n__FabricatedMethod1'<string>() 

ve derleyici oluşturulan yöntemin imzasını:

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 
} 

Ben doğru kod '<>n__FabricatedMethod1'<class T> olması gerektiğini düşünüyorum. Bu bir hata mı? Bu arada, delegate{ } kullanmadan (lambda ifadesi aynıdır), kod sözdizimi şekerleriyle düzgün çalışır. Ben Windows8 RTM VS2012 RTMRel kullanıyorum

Action good = new Action(base.Foo<string>()); 
good(); //fine 

DÜZENLEME, .net framework 4.5

DÜZENLEME Bu hata düzeltildi.

+1

Kodunuz benim için çalışıyor. Hangi C#/Net/Visual Studio sürümünü kullanıyorsunuz? Hangi platformu hedefliyorsunuz? – jeroenh

+0

@jeroenh: C# 4.5 VS2012. –

+0

VS2010, C# 4 ve 3.5 ile çalıştım. Şu an 2012'ye erişiminiz yok, ama kesinlikle bu gece deneyecek. – jeroenh

cevap

3

Bu bir hata olarak doğruladı ve now fixed

Güncelleme edilir: Bağlan makale artık yok. Hata düzeltildi.

+1

Yazık bize bunun ne zaman ulaşacağını asla bilmeyeceğiz. Microsoft bu sitede gerçekten daha iyi iletişim kurmalı ... – leppie

1

Başta - Bu, bunun nasıl düzeltileceğidir, ancak muhtemelen sorunuzun cevabı değil. Eğer bir değişken olarak Foo() yöntemini kullanarak, çünkü Outer Variable Trap ve bir hata (ya da belki bir özellik) .NET

içinde vardır:

bu buna benzer olduğuna inanıyoruz (Ama comments kod biçimlendirme yok mu)

Bu

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

Bang() yöntemini değiştirmek için çalıştık ve nasıl çalıştığını ve sonuç "temel"

Ben biraz yardımcı olur umarım olduğunu.

+0

FYI, Yorumlar * do * kod biçimlendirmesi var, sadece satır sonlarını ekleyemezsiniz ve hala toplam karakter sayısıyla sınırlıdır (işaretlemeyi içerir) –