2015-02-15 15 views
5

tôi đã là một vấn đề xa lạ với AppDomain.DoCallBack() và các loại chung:AppDomain.DoCallBack() với vấn đề loại đa generic

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

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

tôi nhận được một argumentnullexpcetion với thông điệp: "giá trị không thể được null" khi các loại chung là giống nhau.

nếu tôi thay đổi docallback này:

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

đó có nghĩa là nếu các loại generic là khác nhau, không có vấn đề.

lỗi hoặc lỗi này là gì .net lỗi ??

UPDATE: lambda không phải là một cách giải quyết nếu gọi với kiểu generic:

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

Bạn nhận được 'ArgumentNullException' ở đâu? –

+0

Để giúp bạn, chúng tôi cần mã cho DoCallBack () –

+0

tôi nhận được ArgumentNullException trên appDomain.DoCallBack (DoCallBack ); – brainwave

Trả lời

1

Đây là một lỗi trong các cơ sở hạ tầng .NET Remoting. Đây là sự cố trong mã nội bộ .NET.

Tôi không có cách giải quyết tốt. Bạn có thể biên dịch một hàm gói không chung chung bằng cách sử dụng các cây biểu thức. Bạn sẽ cần một lambda như vậy cho mỗi bộ đối số kiểu chung.

+0

Bất kỳ đầu mối nào tại sao nó chỉ xảy ra khi 2 tham số chung giống nhau? – haim770

+0

Tôi không hiểu lỗi. Đây chỉ là một câu trả lời giải pháp. – usr

+0

@usr, vui lòng kiểm tra nhận xét mới của tôi – brainwave

Các vấn đề liên quan