リフレクションに問題があります。基本的に、次のように Class のメソッドを呼び出す必要があります。
public Int32 addNumer (Int32 a, Int32 b)
{
return (a+b);
}
そして、「外部」C#ソフトウェアからこの入力を受け取り、呼び出す必要がある魔女のメソッドを評価する必要があるため、リフレクションで呼び出す必要があります。
問題は、入力として「プロンプトコマンドライン」によって渡された2つのオブジェクトがあるため、バイトに変換したことです。
Byte a = 10;
Byte b = 10;
そのため、Refection を実行すると、入力に 2 バイトのメソッドが見つからなかったため、「メソッド addNumber が見つかりません」というエラーが表示されます。2 Byte ではなく 2 Int32 が必要だったと思います。
どうすれば解決できますか?
D.
更新 1:
Object result_object = target_class.InvokeMember(method,
BindingFlags.InvokeMethod, null, target_object,
args_values, null, null, args_names);
更新 2: EXE ファイルからこの呼び出しを受け取るため、Int32 にキャストできません。
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);
}
}
}
基本的に、すべての Param が渡されるように、キャストします。その後、私はそれを動的に渡します:
Object result_object = target_class.InvokeMember(method,
BindingFlags.InvokeMethod, null, target_object,
args_values, null, null, args_names);