gpt4 book ai didi

c# - Type.InvokeMember 当方法有一个 Dictionary 参数时

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:09 26 4
gpt4 key购买 nike

我得到一个

Method 'MyNameSpace.MyClass.MyMethod' not found.

当我更改 MyMethod 的参数时来自 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)

最佳答案

你有:

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

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

尝试:

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

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

关于c# - Type.InvokeMember 当方法有一个 Dictionary 参数时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17401417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com