मैं मापदंडों के साथ प्रतिबिंब के माध्यम से एक विधि को लागू करने की कोशिश कर रहा हूं और मुझे प्राप्त होता है:
ऑब्जेक्ट लक्ष्य प्रकार से मेल नहीं खाता है
अगर मैं बिना पैरामीटर के किसी विधि को लागू करता हूं, तो यह ठीक काम करता है। निम्नलिखित कोड के आधार पर अगर मैं विधि को कॉल करता हूं 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);
}
}
}
}
}