我有一大堆代码,有时我需要创建一个新的泛型类型,但有一些未知的泛型参数.例如:
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.有没有更好的方法来处理这个?
在那种情况下,是的:
Type actionType = Expression.GetActionType(types);
Run Code Online (Sandbox Code Playgroud)
这里的问题是你可能会使用速度很慢的DynamicInvoke.
一个Action<object[]>随后通过索引访问可能胜过一个Action<...>与DynamicInvoke调用
| 归档时间: |
|
| 查看次数: |
527 次 |
| 最近记录: |