[解決済み】Reflection。パラメータを指定してメソッドを呼び出す方法
2022-04-07 10:03:39
質問
私はパラメータを持つリフレクションを介してメソッドを呼び出そうとしている、と私は得る。
オブジェクトがターゲット型と一致しない
パラメータなしでメソッドを呼び出すと、問題なく動作します。以下のコードに基づき、メソッドを呼び出すと
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);
}
}
}
}
}
解決方法は?
nullパラメータ配列での呼び出しと同様に、"methodInfo" を "classInstance" に変更します。
result = methodInfo.Invoke(classInstance, parametersArray);
関連
-
[解決済み] リフレクションを使用して文字列からプロパティ値を取得する
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] Bash関数にパラメータを渡す
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] Java のメソッド名を文字列で指定した場合、どのように呼び出すのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない