动态调用返回自定义类型的函数时强制转换错误

本文关键字:转换 错误 函数 调用 返回 自定义 类型 动态 | 更新日期: 2023-09-27 17:53:38

在命名空间tool1中有一个名为customType的类。

我正在使用其他一些方法(在命名空间tool1中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?) 

我怎么能克服这个转换错误,并且,希望,返回"不是"一个对象,但"customType的列表"调用方法后??

提前感谢您的关心和贡献,

Aykut

动态调用返回自定义类型的函数时强制转换错误

您忘记强制转换method.Invoke的结果(它返回object):

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

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

试题:

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