将实例化的System.Type作为Generic方法的类型参数传递

时间:2010-10-06 08:28:41

标签: reflection c#-3.0 c#-2.0 generics

我想要简化这段代码:

        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实例。

我正在考虑实现甚至可能吗? 提前感谢您的回复。

1 个答案:

答案 0 :(得分:3)

要获得MethodInfo,请致电Type.GetMethod

MethodInfo method = typeof(TypeContainingMethod).GetMethod("CreateSimpleRows");
MethodInfo generic = method.MakeGenericMethod(typeArgument);

请注意,如果您想获取非公开方法,则需要使用GetMethod的重载,该重载也需要BindingFlags

但是,为什么你想用反射来做这件事并不是很清楚。虽然您当前的代码片段是重复的,但至少要理解它。使用反射可能会使事情更容易出错,而且您仍然必须将typeString映射到Type以开始。