反射参数失配

时间:2016-07-12 10:57:44

标签: c# reflection

我已经在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, "");

enter image description here

任何线索?

修改

public DataSet FETCHvw_WorksiteEntry(string strFilter, string strConn, string strUserName, int lStartRowIndex = 0, int lMaximumRows = 0, string strSortExpression = null);

1 个答案:

答案 0 :(得分:2)

您调用的方法有3个可选参数,在C#代码中调用它们时不需要它们指定它们,但是当您通过反射调用方法时需要它们。

var result = method.Invoke(subject, new Object[] {"", conStr, "", 0, 0, null});

反射忽略可选参数,如果你不想指定它们,那么自己构建一个这样的调用的辅助方法,并自动将这些参数添加到数组中。