আমি প্যারামিটারগুলির সাথে প্রতিবিম্বের মাধ্যমে কোনও পদ্ধতিটি আহ্বানের চেষ্টা করছি এবং আমি পেয়েছি:
লক্ষ্য লক্ষ্য প্রকারের সাথে মেলে না
আমি যদি প্যারামিটার ছাড়াই কোনও পদ্ধতিতে প্রার্থনা করি তবে এটি ভাল কাজ করে। নিম্নলিখিত কোডের উপর ভিত্তি করে যদি আমি পদ্ধতিটি কল করি তবে Test("TestNoParameters")
এটি দুর্দান্ত কাজ করে। তবে আমি যদি ফোন করি তবে আমি Test("Run")
ব্যতিক্রম পাই। আমার কোডে কিছু ভুল আছে?
আমার প্রাথমিক উদ্দেশ্যটি ছিল একটি সামগ্রীর অ্যারে পাস করানো public void Run(object[] options)
but উদাহরণস্বরূপ, তবে এটি কার্যকর হয়নি এবং আমি সহজ কিছু চেষ্টা করেছি string সাফল্য ছাড়াই স্ট্রিং।
// 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);
}
}
}
}
}