2015-02-15 21 views
5

i mesajla bir argumentnullexpcetion olsunAppDomain.DoCallBack() i AppDomain.DoCallBack() ve jenerik türleri ile garip bir sorun var

static void InvokeIsolated() { 
    AppDomain appDomain = AppDomain.CreateDomain("testDomain"); 
    appDomain.DoCallBack(MyDoCallBack<string, string>); <-- ArgumentNullException! 
} 

static void MyDoCallBack<T, T1>() {} 

: "değer null olamaz" Genel türler aynı olduğunda .

ben bu kadar DoCallback değiştirirseniz:

appDomain.DoCallBack(MyDoCallBack<string, int>); <-- OK! 

jenerik türleri farklı ise, hiçbir sorun yok demektir.

Sorun nedir ya da bu bir .net hatası mı?

GÜNCELLEME: Bu .NET Remoting altyapısında bir hata olduğunu

static void Foo() 
{ 
    InvokeIsolated<string, string>(); 
} 

static void InvokeIsolated<T, T1>() 
{ 
    AppDomain appDomain = AppDomain.CreateDomain("testDomain"); 
    appDomain.DoCallBack(() => MyDoCallBack<T, T1>()); //<--ArgumentNullException 
} 

static void MyDoCallBack<T, T1>() {} 
+0

'ArgumentNullException' nı nereden alırsınız? –

+0

DoCallBack () –

+0

için yardıma ihtiyacımız olması için appDomain.DoCallBack'de ArgumentNullException (DoCallBack ); – brainwave

cevap

1

: lambda eğer jenerik türleri ile adlandırılan bir geçici çözüm değildir. Bu, .NET iç kodunda bir kilitlenme.

İyi bir çözümüm yok. İfade ağaçlarını kullanarak genel olmayan bir sarma işlevini derleyebilirsiniz. Jenerik tip argümanları kümesine göre böyle bir lambdaya ihtiyacınız olacaktır.

+0

Herhangi bir ipucu sadece 2 genel parametre aynı olduğunda neden oluyor? – haim770

+0

Bu hatayı anlamıyorum. Bu sadece geçici bir cevaptır. – usr

+0

@usr, lütfen yeni yorumumu kontrol edin – brainwave

İlgili konular