带有“反射”参数的c#中的InvokeMember

时间:2010-11-09 22:43:39

标签: c# reflection parameters invoke

我想通过反射调用DLL的方法(不能确定是否加载了其他dll)但是参数有问题。

我想要调用的方法是

public void Add(DBTable table, String sField, DBValue value, SQLConditionType type)
the MP-TVSeries project

中的

我试过的是:

        // WindowPlugins.GUITVSeries
        Assembly MPTVSeries = Assembly.Load("MP-TVSeries");
        Type sqlConditionType = MPTVSeries.GetType("WindowPlugins.GUITVSeries.SQLCondition");
        Type sqlConditionTypeEnumType = MPTVSeries.GetType("WindowPlugins.GUITVSeries.SQLConditionType");
        Type dbEpisode = MPTVSeries.GetType("WindowPlugins.GUITVSeries.DBEpisode");

        // SQLCondition sql = new SQLCondition();
        object sql = Activator.CreateInstance(sqlConditionType);

        // sql.Add(new DBEpisode(), DBEpisode.cFilename, filename, SQLConditionType.Equal);
        sqlConditionType.InvokeMember("Add",
        BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,
        null,
        sql,
        new object[] { 
            Activator.CreateInstance(dbEpisode),
            dbEpisode.GetField("cFilename"),
            filename,
            sqlConditionTypeEnumType.GetField("Equal")
        });

但是这会抛出消息

的异常
  

方法“WindowPlugins.GUITVSeries.SQLCondition.Add”   无法找到。

我的猜测是我对参数做错了,但由于我对反射很陌生,所以我无法理解它。

有人请帮忙; - )

1 个答案:

答案 0 :(得分:0)

你走得太快了。首先获取sqlConditionType.GetMethod()以获取MethodInfo,这样您就可以确定这不是方法重载解决问题。你传递的参数很臭,特别是 filename sqlConditionTypeEnumType.GetField(“Equal”)