Ich versuche, eine Methode durch Reflektion mit Parametern aufzurufen und erhalte:
Objekt stimmt nicht mit Zieltyp überein
Wenn ich eine Methode ohne Parameter aufrufe, funktioniert sie einwandfrei. Basierend auf dem folgenden Code Test("TestNoParameters")
funktioniert es einwandfrei, wenn ich die Methode aufrufe. Wenn ich jedoch anrufe Test("Run")
, erhalte ich eine Ausnahme. Stimmt etwas mit meinem Code nicht?
Mein ursprünglicher Zweck war es, eine Reihe von Objekten zu übergeben, z. B. public void Run(object[] options)
aber dies funktionierte nicht und ich versuchte etwas Einfacheres, z. B. eine Zeichenfolge, 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);
}
}
}
}
}