2015-02-15 4 views
5

मैं AppDomain.DoCallBack() और सामान्य प्रकार के साथ एक अजीब मुद्दा है:AppDomain.DoCallBack() बहु सामान्य प्रकार के मुद्दे के साथ

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

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

मैं संदेश के साथ एक argumentnullexpcetion मिलती है: "मान शून्य नहीं हो सकता है" जब सामान्य प्रकार समान होते हैं।

अगर मैं यह करने के लिए docallback बदलने के लिए:

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

अगर सामान्य प्रकार अलग हैं, वहाँ कोई समस्या नहीं है इसका मतलब है कि।

क्या गलत है या यह एक .net बग है ??

अद्यतन:

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' मिलता है? –

+0

आदेश में मदद करने के लिए हम DoCallBack () –

+0

के लिए कोड की जरूरत है मैं (DoCallBack <स्ट्रिंग, स्ट्रिंग>) appDomain.DoCallBack पर ArgumentNullException मिलता है, – brainwave

उत्तर

1

यह नेट दूरस्थ बुनियादी ढांचे में एक बग है: लैम्ब्डा एक समाधान है, तो सामान्य प्रकार के साथ कहा जाता है नहीं है। यह .NET आंतरिक कोड में एक क्रैश है।

मैं एक अच्छी युक्ति नहीं है। आप अभिव्यक्ति पेड़ का उपयोग कर एक गैर-जेनेरिक रैपिंग फ़ंक्शन संकलित कर सकते हैं। आपको जेनेरिक प्रकार के तर्कों के सेट के इस तरह के एक लैम्ब्डा की आवश्यकता होगी।

+0

कोई संकेत यह क्यों होता है जब 2 जेनेरिक पैरामीटर समान होते हैं? – haim770

+0

मुझे बग समझ में नहीं आता है। यह सिर्फ एक कामकाज जवाब है। – usr

+0

@usr, कृपया मेरी नई टिप्पणी देखें – brainwave

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