繁体   English   中英

当方法具有Dictionary参数时,Type.InvokeMember

[英]Type.InvokeMember when method has a Dictionary parameter

我正在

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

当我将MyMethod的参数从Hashtable更改为Dictionary<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)

你有:

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

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

尝试:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM