1

Parameter count mismatch.尝试调用该行的另一个类中的方法时出现错误val = (bool)method.Invoke(instance, args);

该方法只有一个参数,并且(我认为)我将一个参数作为对象传递,所以不确定为什么会出现错误。

请有人能告诉我我的代码有什么问题吗?

class firstClass
{
    public bool MethodXYZ(System.Windows.Forms.WebBrowser Wb, 
                    string debug_selectedOption)
    {
        object[] args = new object[] { Wb, debug_selectedOption };
        string methodToInvoke = System.Reflection.MethodBase.GetCurrentMethod().Name;
        return runGenericMethod(methodToInvoke, args);

    }
        private bool runGenericMethod(string methodToInvoke, object[] args)
        {
            bool val = false;
            string anotherClass = args[1].ToString();
            Type t = Type.GetType("ProjectXYZ." + anotherClass);
            MethodInfo method = t.GetMethod(methodToInvoke);
            var constructorInfo = t.GetConstructor(new Type[0]);
            if (constructorInfo != null)
            {
                object instance = Activator.CreateInstance(t);
                val = (bool)method.Invoke(instance, args);
            }
        //........
            return val;
        }
}


class anotherClass
{
        public bool MethodXYZ(object[] args)
        {
            return true;
        }
}
4

2 回答 2

4

Invoke接受一个对象数组来支持可变数量的参数。在您的情况下,您只有一个参数,它本身位于对象数组中。所以你需要创建一个新的对象数组,它的唯一成员是原始对象数组:

       val = (bool)method.Invoke(instance, new object[] {args});
于 2013-10-18T18:04:40.870 回答
2

试试这个

val = (bool)method.Invoke(instance, new object[] { args });

Invoke方法的第二个参数object[]take 用于传递参数的数量,例如:args[0] 作为第一个参数,args[1] 作为第二个参数,依此类推。

So when you pass object[] runtime assumes you're passsing multiple parameters, to make it clear to runtime you need to wrap inside another object[] which has only one element so it is passed as first parameter

于 2013-10-18T18:05:34.287 回答