У меня есть проблема с отражением, в основном мне нужно вызвать метод класса, как этот:
public Int32 addNumer (Int32 a, Int32 b)
{
return (a+b);
}
И мне нужно вызвать его с помощью Reflection, потому что я получаю этот вход от "внешнего" C #ПО и мне нужно оценить метод ведьмы, который мне нужно вызвать.
Проблема в том, что в качестве ввода у меня есть 2 объекта, переданных "командной строкой приглашения", o я преобразовал его в байт:
Byte a = 10;
Byte b = 10;
Итак, когда я выполняю Refection, я вижу ошибку "not find method addNumber", потому что метод с 2 байтами на входе не был найден.Я думаю, что ожидалось 2 Int32, а не 2 байта.
Как я могу решить это?
D.
ОБНОВЛЕНИЕ 1:
Object result_object = target_class.InvokeMember(method,
BindingFlags.InvokeMethod, null, target_object,
args_values, null, null, args_names);
ОБНОВЛЕНИЕ 2: Я не могу CAST на Int32, потому что я получаю этот вызов из файла EXE:
MyProjectPrompt.exe Namespace.Class.Method param1 param2
Пример:
MyProjectPrompt.exe It.Company.Math.Add 10 10
РЕШЕНИЕ
ParameterInfo[] listaParametr = method_to_invoke.GetParameters();
ParameterInfo infoParam;
for(Int32 va=0;va<listaParametr.Length;va++)
{
infoParam = listaParametr[va];
for(Int32 va2=0;va2<args_values.Length;va2++)
{
if(args_names[va2]==infoParam.Name)
{
args_values[va2] = Convert.ChangeType(args_values[va2],
infoParam.ParameterType);
}
}
}
В основном, чтобы КАЖДЫЙ Парам проходил, я разыгрываю его.После этого я передаю его динамически:
Object result_object = target_class.InvokeMember(method,
BindingFlags.InvokeMethod, null, target_object,
args_values, null, null, args_names);