ฉันพยายามเรียกใช้วิธีการผ่านการสะท้อนกับพารามิเตอร์และฉันได้รับ:
วัตถุไม่ตรงกับประเภทเป้าหมาย
ถ้าฉันเรียกใช้เมธอดที่ไม่มีพารามิเตอร์จะทำงานได้ดี ขึ้นอยู่กับรหัสต่อไปนี้ถ้าฉันเรียกวิธีการTest("TestNoParameters")
ทำงานได้ดี อย่างไรก็ตามถ้าฉันโทรTest("Run")
ฉันจะได้รับการยกเว้น มีบางอย่างผิดปกติกับรหัสของฉันหรือไม่
จุดประสงค์เริ่มต้นของฉันคือการส่งอาร์เรย์ของวัตถุเช่นpublic void Run(object[] options)
แต่สิ่งนี้ไม่ได้ผลและฉันพยายามทำสิ่งที่ง่ายกว่าเช่นสตริงที่ไม่ประสบความสำเร็จ
// 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);
}
}
}
}
}