我已经在SO和Google上查看了一些类似的问题,但无论如何都无法解决我的问题。
基本上我在我的restful API的其中一个类中使用此代码的参数不匹配:
Param是字符串(我希望使用的方法的名称)。
var myType = typeof(JaberoDC.JaberoDC.JaberoDC);
var method = myType
.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
.Single(mi =>mi.ReturnType == typeof(DataSet)
&& string.Equals(mi.Name, param, StringComparison.OrdinalIgnoreCase));
var subject = Activator.CreateInstance(myType);
var result = method.Invoke(subject, new Object[] {"", conStr, ""}); //error here
虽然我正在调用与此完全相同的方法:
DataSet ds = jdc.FETCHvw_WorksiteEntry("", conStr, "");
任何线索?
修改
public DataSet FETCHvw_WorksiteEntry(string strFilter, string strConn, string strUserName, int lStartRowIndex = 0, int lMaximumRows = 0, string strSortExpression = null);
答案 0 :(得分:2)
您调用的方法有3个可选参数,在C#代码中调用它们时不需要它们指定它们,但是当您通过反射调用方法时需要它们。
var result = method.Invoke(subject, new Object[] {"", conStr, "", 0, 0, null});
反射忽略可选参数,如果你不想指定它们,那么自己构建一个这样的调用的辅助方法,并自动将这些参数添加到数组中。