Reflektion: Wie Methode mit Parametern aufgerufen wird

Ich versuche eine Methode aufzurufen, die Sie über reflektion mit Parametern und ich bekomme:

Objekt nicht mit Zieltyp

Wenn ich das aufrufen einer Methode ohne Parameter funktioniert es einwandfrei. Basierend auf den folgenden code, wenn ich die Methode aufrufen Test("TestNoParameters") es funktioniert gut. Jedoch wenn ich den Anruf Test("Run") ich eine Ausnahme. Ist etwas falsch mit meinem code?

Meine anfängliche Zweck war die übergabe eines Arrays von Objekten z.B. public void Run(object[] options) aber das hat nicht funktioniert und ich habe versucht etwas einfacher, z.B. string, ohne Erfolg.

//Assembly1.dll
namespace TestAssembly
{
    public class Main
    {
        public void Run(string parameters)
        { 
            //Do something... 
        }
        public void TestNoParameters()
        {
            //Do something... 
        }
    }
}

//Executing Assembly.exe
public class TestReflection
{
    public void Test(string methodName)
    {
        Assembly assembly = Assembly.LoadFile("...Assembly1.dll");
        Type type = assembly.GetType("TestAssembly.Main");

        if (type != null)
        {
            MethodInfo methodInfo = type.GetMethod(methodName);

            if (methodInfo != null)
            {
                object result = null;
                ParameterInfo[] parameters = methodInfo.GetParameters();
                object classInstance = Activator.CreateInstance(type, null);

                if (parameters.Length == 0)
                {
                    //This works fine
                    result = methodInfo.Invoke(classInstance, null);
                }
                else
                {
                    object[] parametersArray = new object[] { "Hello" };

                    //The invoke does NOT work;
                    //it throws "Object does not match target type"             
                    result = methodInfo.Invoke(methodInfo, parametersArray);
                }
            }
        }
    }
}
Kommentare dem Thema
die korrekte Zeile wäre, object[] parametersArray = new object[] { new object[] { "Hallo" } }; Kommentarautor: Nick Kovalsky

InformationsquelleAutor der Frage Ioannis | 2010-02-04

Schreibe einen Kommentar