为什么将带有params object []的方法作为args引发转换错误?

时间:2018-06-19 12:53:01

标签: c# .net generics reflection

我正在尝试使用通用包装器来封装我的肥皂呼叫,以简化日志记录和其他公用程序。

当尝试在发送的客户端上调用方法时,使用参数时会抛出此错误:

  

{“无法将类型为'System.String'的对象转换为类型为'System.String []'。”}

我的代码:

private T CallExternalSoap<T>(object client, string funcName, params object[] args)
{
    var type = client.GetType();

    var method = type.GetMethod(funcName);

    if (method is null)
    {
        throw new NullReferenceException($"Could not find method {funcName} on object of type {type}.");
    }

    if (method.GetParameters().Length != args.Length)
    {
        throw new Exception($"Number of parameters in {args} does not match number of expected parameters in method {funcName} . Expected {method.GetParameters().Length} parameters");
    }

    var result = (T)method.Invoke(client, args);
    return result;
}

无论我发送哪个对象/参数,都会收到该错误。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题不在于参数,而在于转换结果。

SOAP方法返回一个字符串,但是您将根据类型参数将其转换为字符串[]。

CallExternalSoap<string[]>(...