AppDomain.DoCallBack()具有多种泛型类型问题

时间:2015-02-15 11:33:01

标签: c# generics appdomain

AppDomain.DoCallBack()和泛型类型存在一个奇怪的问题:

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

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

我得到一个带有消息的argumentnullexpcetion:&#34; value不能为null&#34; 当泛型类型相同时。

如果我将docallback更改为:

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

这意味着如果泛型类型不同,则没有问题。

出了什么问题,或者这是一个.net bug ??

更新: 如果使用泛型类型调用,lambda不是一种解决方法:

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>() {}

1 个答案:

答案 0 :(得分:1)

这是.NET Remoting基础结构中的一个错误。这是.NET内部代码崩溃。

我没有一个好的解决方法。您可以使用表达式树编译非泛型包装函数。每组泛型类型参数都需要一个这样的lambda。