动态调用返回自定义类型的函数时出错

时间:2016-06-29 21:51:43

标签: c# reflection types

我在名称空间工具1中有一个名为customType的类。

我正在使用其他方法(名称空间工具1中的class1),名为routine1 - 返回" customType"列表,如下所示。

此代码返回一个没有错误的customtype列表:

    List<tool1.class1.customType> result1 = new List<tool1.class1.customType>();
    result1 = tool1.class1.routine1(argsAsStr, p_values);

以下代码也可以正常工作,没有错误并返回一个对象,如下所示:

    Assembly tool1 = Assembly.LoadFrom(@"C:\tool1\tool1\bin\Debug\tool1.dll");
    Type type = tool1.GetType("tool1.class1");
    object instance = Activator.CreateInstance(type);
    object[] parametersArray = new object[] { argsAsStr, p_values};
    MethodInfo method = type.GetMethod("routine1");
    object result2 = method.Invoke(instance, parametersArray); 

但是,当我尝试将结果转换为List而不是object时,我收到一个转换错误:

    Assembly tool1 = Assembly.LoadFrom(@"C:\tool1\tool1\bin\Debug\tool1.dll");
    Type type = tool1.GetType("tool1.class1");
    object instance = Activator.CreateInstance(type);
    object[] parametersArray = new object[] { argsAsStr, p_values};
    MethodInfo method = type.GetMethod("routine1");
    List<tool1.class1.customType> result2 = method.Invoke(instance, parametersArray)

错误讯息:

Error: Cannot implicitly convert type 'object' to 'System.Collections.Generic.List<tool1.class1.customType>'. 
An explicit conversion exists (are you missing a cast?) 

我如何克服这个投射错误,并希望返回&#34; not&#34;一个对象但是&#34;一个customType&#34;在调用方法后??

提前感谢您的兴趣和贡献,

艾库特

2 个答案:

答案 0 :(得分:0)

您忘记投放method.Invoke(返回object)的结果:

var result2 = (List<tool1.class1.customType>)method.Invoke(instance, parametersArray);

答案 1 :(得分:-1)

您的“方法”返回自定义类型的单个实例,而不是该类型的列表。

尝试:

List<tool1.class1.customType> result2 = new List<tool1.class1.customType>();
result2.Add(method.Invoke(instance, parametersArray));