我想要简化这段代码:
switch (typeString)
{
case "boolean":
CreateSimpleRows<bool>(ref group, value);
break;
case "datetime":
CreateSimpleRows<DateTime>(ref group, value);
break;
case "double":
CreateSimpleRows<double>(ref group, value);
break;
case "int32":
CreateSimpleRows<int>(ref group, value);
break;
case "int64":
CreateSimpleRows<long>(ref group, value);
break;
case "string":
CreateSimpleRows<string>(ref group, value);
break;
}
该方法声明为CreateSimpleRows<T>
。我尝试传递一个System.Type实例,但是没有用。
我遇到了类似问题的答案: Pass An Instantiated System.Type as a Type Parameter for a Generic Class
我已经检查过,我已经看到MethodInfo类中有一个MakeGenericMethod。 事实是,我不知道如何将“CreateSimpleRows”转换为MethodInfo实例。
我正在考虑实现甚至可能吗? 提前感谢您的回复。
答案 0 :(得分:3)
要获得MethodInfo
,请致电Type.GetMethod
:
MethodInfo method = typeof(TypeContainingMethod).GetMethod("CreateSimpleRows");
MethodInfo generic = method.MakeGenericMethod(typeArgument);
请注意,如果您想获取非公开方法,则需要使用GetMethod
的重载,该重载也需要BindingFlags
。
但是,为什么你想用反射来做这件事并不是很清楚。虽然您当前的代码片段是重复的,但至少要理解它。使用反射可能会使事情更容易出错,而且您仍然必须将typeString
映射到Type
以开始。