6

私は、パブリック静的クラスと静的メソッドをそのパラメーターとともに使用しています。

public static class WLR3Logon
{
   static void getLogon(int accountTypeID)
   {}
}

今、私は別のクラスにパラメータを使用してメソッドを取得しようとしており、次のコードを使用しています:

MethodInfo inf = typeof(WLR3Logon).GetMethod("getLogon",
    BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy);

int[] parameters = { accountTypeId };

foreach (int parameter in parameters)
{
    inf.Invoke("getLogon", parameters);
}

しかし、それは私にエラーを与えます

"オブジェクト参照がオブジェクト インスタンスに設定されていません。"

私が間違っているところ。

4

4 に答える 4

19

この問題は、次のアプローチを使用して解決されました。

using System.Reflection;    
string methodName = "getLogon";
Type type = typeof(WLR3Logon);
MethodInfo info = type.GetMethod(
    methodName, 
    BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);

object value = info.Invoke(null, new object[] { accountTypeId } );
于 2012-06-22T14:40:42.843 に答える
7

ここには多くの問題があります

  • あなたの静的メソッドは非公開ですが、パブリックに表示されるアクセスのみでフィルター処理されたメソッドを選択します。メソッドをパブリックにするか、バインド フラグにプライベート メソッドが含まれていることを確認してください。現時点では、null ref 例外の原因となる null である inf を返すメソッドは見つかりません。
  • パラメーターは、MethodInfo がオブジェクトの配列を想定している int の配列です。オブジェクトの配列を確実に渡す必要があります。
  • パラメータセット全体を使用してメソッドを複数回呼び出すためだけに、パラメータをループします。ループを取り外します。
  • メソッドの名前を最初の引数として MethodInfo.Invoke を呼び出しますが、これは、メソッドがインスタンス メソッドであった場合、このパラメーターはインスタンスに対して使用されるため、役に立ちません。あなたの場合、この引数は無視されます
于 2012-06-20T10:25:23.163 に答える
3

アクセス修飾子を明示的に宣言していないため、メソッドはプライベートです。コードを意図したとおりに機能させるには、次の2つのオプションがあります。

  • メソッドをに変更しますpublic
  • 通話で指定BindingFlags.NonPublicするGetMethod
于 2012-06-20T10:19:46.037 に答える
1

あなたの方法を作りますpublic。その後動作するはずです

 public static class WLR3Logon
 {
       public static void getLogon(int accountTypeID)
       {}
 }
于 2012-06-20T10:24:19.093 に答える