2

我得到一个

找不到方法“MyNameSpace.MyClass.MyMethod”。

当我将参数MyMethodfrom更改HashtableDictionary<string, string>.

调用调用是

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)
4

2 回答 2

1

你有:

params[5] = foo.myHashtable.Cast<DictionaryEntry>()
               .ToDictionary(d => d.Key, d => d.Value); 

这会创建一个Dictionary<object,object>与签名不匹配的 。这是因为 a DictionaryEntryhas object Key {get;}and object Value {get;},并且编译器正在使用它们来推断字典的类型(泛型类型推断)。

尝试:

params[5] = foo.myHashtable.Cast<DictionaryEntry>()
               .ToDictionary(d => (string)d.Key, d => (byte[])d.Value); 

这将创建一个Dictionary<string,byte[]>,它应该匹配。

于 2013-07-01T09:51:55.023 回答
0

反射找不到该方法,因为该方法需要哈希表而不是字典,字典不继承自哈希表,因此您不能使用字典代替哈希表。在反射可以调用方法之前,方法签名应该匹配。

于 2013-07-01T09:49:14.183 回答