Saya mencoba untuk memanggil metode melalui refleksi dengan parameter dan saya mendapatkan:
objek tidak cocok dengan tipe target
Jika saya memanggil metode tanpa parameter, itu berfungsi dengan baik. Berdasarkan kode berikut jika saya memanggil metode Test("TestNoParameters"), itu berfungsi dengan baik. Namun jika saya menelepon Test("Run"), saya mendapat pengecualian. Apakah ada yang salah dengan kode saya?
Tujuan awal saya adalah untuk melewatkan array objek misalnya public void Run(object[] options)tetapi ini tidak berhasil dan saya mencoba sesuatu yang lebih sederhana mis. String tanpa keberhasilan.
// 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);
}
}
}
}
}