反思通过名称和返回类型找到方法

时间:2016-07-11 14:17:50

标签: c# rest reflection

我之前遇到过使用反射的问题,您可以看到here

在收到问题的答案并试图将其实施到我的项目之后,我似乎又遇到了另一面墙。

基本上我有这段代码:

 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;

其中 param 字符串

但是,它似乎没有按预期工作。

该行

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

引发错误

  

未知方法GetMethods(string,System.Reflection.BindingFlags)   System.Type的

并且

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

引发此错误:

  

未知类型的变量mi

任何人都可以帮助我正确初始化 方法 变量。我在谷歌周围环顾四周,看看我是否能找到一些东西,至少指出我正确的方向。我之前的代码(再次,请参阅other question)编译并运行,但发现模糊匹配错误。

修改

将我的代码更改为更像下面的答案。但是我在调​​试时遇到错误:

  

targetparametercountexception参数计数不匹配

这就发生在这条线上:

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

从在线阅读反思看起来你应该传入一个参数数组,你调用的方法需要(在我的例子中是数组)。在另一个班级,我使用它(这非常好;我试图调用完全相同的方法):

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

EDIT1结束。

1 个答案:

答案 0 :(得分:0)

这就是你正在尝试的,但我认为这不是你想要的。

DataSet

这会为您提供一个方法,并且您知道它返回 var method = myType.GetMethod(param, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly, null, new Type[] {typeof (string)}, null); ,但不能保证您可以使用您拥有的参数调用它。

这会更好:

{typeof(string)}

数组new Type[] {typeof (string), typeof(string)}是方法接收的参数类型的数组。这样你就可以找到你想要的方法,而不仅仅是具有正确返回类型的方法。

(我不清楚该方法的参数是什么。如果它是两个字符串那么就是new Type[] {typeof (string[])}。如果它是一个字符串数组,那么https://www.googleapis.com/youtube/v3/videos?regionCode=es&id=Rx9OoLwiAho&key={}&part=snippet,contentDetails,statistics,status