【发布时间】:2013-07-01 09:43:04
【问题描述】:
我得到了一个
找不到方法“MyNameSpace.MyClass.MyMethod”。
当我将MyMethod 的参数从Hashtable 更改为Dictionary<string, string>。
invoke 调用是
return = t.InvokeMember("MyMethod", (BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod), null, instance, params);
当我这样做时
Type type = a.GetType(String.Concat(DLLName, ".MyClass"));
var methods = t.GetMethods();
methods 包含 MyMethod() 所以它就在那里。
谁能解释一下?
params 是
Object[] params = new Object[11];
...
params[5] = foo.myHashtable.Cast<DictionaryEntry>().ToDictionary(d => d.Key, d => d.Value);
...
MyMethod 签名是
public MyMethodReturn MyMethod(Byte[] m, Hashtable d, Mutex mut, FileStream logFile, Hashtable t, Dictionary<string, Byte[]> fields, bool e, byte[] k, int hashCode, bool h, Byte[] mm)
【问题讨论】:
-
foo.myHashtable.Cast<DictionaryEntry>().ToDictionary(d => d.Key, d => d.Value);实际上并没有把字典放在任何地方——它只是把它放在地板上让垃圾收集器处理;您是否将其分配给变量或任何东西?更好:您能否显示 actually 使用您的输入调用InvokeMember的 actual 代码?最好是MyMethod的实际 签名(因为我担心...中可能隐藏着什么) -
我没有正确复制和粘贴。已编辑。好的。
标签: c# reflection dictionary hashtable invokemember