Tôi đang cố gắng gọi một phương thức thông qua sự phản chiếu với các tham số và tôi nhận được:
đối tượng không phù hợp với loại mục tiêu
Nếu tôi gọi một phương thức không có tham số, nó hoạt động tốt. Dựa trên đoạn mã sau nếu tôi gọi phương thức Test("TestNoParameters")
, nó hoạt động tốt. Tuy nhiên nếu tôi gọi Test("Run")
, tôi nhận được một ngoại lệ. Có gì đó không đúng với mã của tôi?
Mục đích ban đầu của tôi là để vượt qua một loạt các đối tượng, ví dụ như public void Run(object[] options)
điều này không hoạt động và tôi đã thử một cái gì đó đơn giản hơn, ví dụ như chuỗi không thành công.
// 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);
}
}
}
}
}