2016-07-11 4 views
0

以前はリフレクションの使用に問題がありましたが、これはhereです。名前と再入力でメソッドを見つけるためのリフレクション

質問に対する回答を受け取り、それを私のプロジェクトに実装しようとしたが、私はまだ別の壁に衝突したようだ。

は基本的に私はこのコードを持っている:のparam文字列ある

String[] arr = {"", conStr, ""}; 
      var myType = (typeof(JaberoDC.JaberoDC.JaberoDC)); 


      var method = myType.GetMethods(param, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly).Single(mi => mi.ReturnType == typeof(DataSet)); 
      var subject = Activator.CreateInstance(myType); 
      var result = method.Invoke(subject, arr); 


      DataSet ds = (DataSet)result; 

ただし、意図したとおりに動作しないようです。

ライン

var method = myType.GetMethods (param, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly) .Single(mi => mi.ReturnType == typeof(DataSet)); 

エラー

Unkown method GetMethods(string, System.Reflection.BindingFlags) of System.Type

そして

mi => mi.ReturnType == typeof(DataSet)); 

はこのエラーを例外例外:

Unkown type of variable mi

誰でも私の正しい初期化私を助けることができる方法変数。私は、Googleを見回して、少なくとも正しい方向に私を向ける何かを見つけることができるかどうかを見てきました。私の前のコード(再度、other questionを参照してください)をコンパイルして実行しましたが、のあいまいな一致が見つかりましたエラー。

EDIT:

はより以下の回答のようになり、私のコードを変更しました。私はエラーを取得していますが、それをデバッグ中:

targetparametercountexception parameter count mismatch

この回線で起こっている

:あなたはパラメータの配列を渡すべきであるようにそれはそうオンライン反射について読んでから

var result = method.Invoke(subject, arr); 

こと呼び出すメソッドが必要です(私の場合は配列です)。私はこれを使用して別のクラスでは(絶対に正常に動作します。私は、まったく同じ方法を起動しようとしています):

DataSet ds = jdc.FETCHvw_WorksiteEntry("", conStr, ""); 

EDIT1の終わり。

+0

コード?現時点ではあなたのサンプルのどこにも表示されていません –

+0

リフレクションを通して呼び出そうとしているメソッドを表示できますか? – user3185569

+0

2つの引数https:// msdnを受け取るType.GetMethodsのオーバーロードが見つかりません。 microsoft.com/en-us/library/4d848zkb(v=vs.110).aspx – m1o2

答えて

0

これはあなたが試していることですが、私はあなたが望むものとは思えません。

var method = myType.GetMethods(
    BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly) 
    .Single(mi => 
     mi.ReturnType == typeof(DataSet) 
     && string.Equals(mi.Name, param, StringComparison.OrdinalIgnoreCase)); 

これは、あなたの方法を取得し、あなたはそれがDataSetを返しますが、あなたが持っている引数(複数可)と、それを呼び出すことができるという保証はありませんことを知っています。

これは良いだろう:配列{typeof(string)}は、メソッドが受け取るパラメータの型の配列です

var method = myType.GetMethod(param, 
     BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, 
     null, new Type[] {typeof (string)}, null); 

。そうすれば、正しい戻り値の型だけでなく、必要なメソッドを正確に探し出すことができます。

(私はそれは二つの文字列だ場合、それはnew Type[] {typeof (string), typeof(string)}だろう。それは、その後new Type[] {typeof (string[])}文字列の配列です場合。メソッドの引数が何であるかを明確にしなかった。 `param`は、あなたの中から来たん

+0

それは素晴らしいですね。しかし、それを使用して私は結果にエラーが表示されます。 できるだけそれを説明する編集を追加します。 – geostocker

関連する問題