制作具有多种类型的泛型

A.R*_*.R. 6 c# generics

我有一大堆代码,有时我需要创建一个新的泛型类型,但有一些未知的泛型参数.例如:

public object MakeGenericAction(Type[] types)
{
  return typeof(Action<>).MakeGenericType(paramTypes);
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我的数组中有多个Type,那么程序将崩溃.在短期内,我提出了类似的事情作为一个止损.

public object MakeGenericAction(Type[] types)
{
  if (types.Length == 1)
  {
    return typeof(Action<>).MakeGenericType(paramTypes);
  }
  else if (types.Length ==2)
  {
    return typeof(Action<,>).MakeGenericType(paramTypes);
  }
  ..... And so on....
}
Run Code Online (Sandbox Code Playgroud)

这确实有效,并且很容易覆盖我的场景,但它似乎真的很hacky.有没有更好的方法来处理这个?

Mar*_*ell 5

在那种情况下,是的:

Type actionType = Expression.GetActionType(types);
Run Code Online (Sandbox Code Playgroud)

这里的问题是你可能会使用速度很慢的DynamicInvoke.

一个Action<object[]>随后通过索引访问可能胜过一个Action<...>与DynamicInvoke调用