매개 변수를 사용하여 리플렉션을 통해 메서드를 호출하려고하면 다음과 같은 결과가 나타납니다.
객체가 대상 유형과 일치하지 않습니다
매개 변수없이 메소드를 호출하면 정상적으로 작동합니다. 메소드를 호출하면 다음 코드를 기반으로 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);
}
}
}
}
}