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可変数のパラメータをサポートするオブジェクト配列を取ります。あなたの場合、それ自体がオブジェクト配列にあるパラメーターが1つだけあります。したがって、唯一のメンバーが元のオブジェクト配列である新しいオブジェクト配列を作成する必要があります。

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

これを試して

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

Invokeメソッドの 2 番目のパラメーターはobject[]、パラメーターの数を渡すために使用されます ex:args[0] を最初のパラメーターとして、args[1] を 2 番目のパラメーターとして、など。

したがって、オブジェクト[]を渡すと、ランタイムは複数のパラメーターを渡すと想定します。ランタイムに明確にするために、要素が1つしかない別のオブジェクト[]内にラップする必要があるため、最初のパラメーターとして渡されます

于 2013-10-18T18:05:34.287 に答える