变量泛型类型计数运行时反射
Variable generic type count runtime reflection
现在我有这个代码:
//some Method detection here..
var methodParams = method.GetParameters();
Type actionType = null;
switch(methodParams.Length)
{
case 1:
actionType = typeof(Action<>);
break;
case 2:
actionType = typeof(Action<,>);
break;
case 3:
actionType = typeof(Action<,,>);
break;
case 4:
actionType = typeof(Action<,,,>);
break;
case 5:
actionType = typeof(Action<,,,,>);
break;
}
var actionGenericType = actionType.MakeGenericType(methodParams.Select(x => x.ParameterType).ToArray());
我不喜欢这个 switch 语句,但我还没有找到一种方法来 select 基于参数数量(或基于任何运行时 int
)的 Action 泛型重载.
有没有更优雅的方式/oneliner 来做这样的事情?
我不想使用调度程序table。
正如我在调试器中看到的那样,actionType
可以通过以下方式获得:
var actionType = Type.GetType("System.Action`" + methodParams.Length);
现在我有这个代码:
//some Method detection here..
var methodParams = method.GetParameters();
Type actionType = null;
switch(methodParams.Length)
{
case 1:
actionType = typeof(Action<>);
break;
case 2:
actionType = typeof(Action<,>);
break;
case 3:
actionType = typeof(Action<,,>);
break;
case 4:
actionType = typeof(Action<,,,>);
break;
case 5:
actionType = typeof(Action<,,,,>);
break;
}
var actionGenericType = actionType.MakeGenericType(methodParams.Select(x => x.ParameterType).ToArray());
我不喜欢这个 switch 语句,但我还没有找到一种方法来 select 基于参数数量(或基于任何运行时 int
)的 Action 泛型重载.
有没有更优雅的方式/oneliner 来做这样的事情?
我不想使用调度程序table。
正如我在调试器中看到的那样,actionType
可以通过以下方式获得:
var actionType = Type.GetType("System.Action`" + methodParams.Length);