gpt4 book ai didi

.net - 如何通过类型名称获取泛型接口(interface)的类型?

转载 作者:行者123 更新时间:2023-12-01 05:39:59 24 4
gpt4 key购买 nike

好的,这是我的问题:

我有一个 xml 文件,其中记录了方法及其参数。此 xml 文件记录了一个 ID 值列表,其 .net 通用接口(interface)类型名称如下:

System.Collections.Generic.IList`1[CoreLib.Domain.MyClass]

我知道这些参数中的大多数将是通用列表或字典。当我尝试对从 xml 读取的字符串值使用 GetType 时,它​​都返回 null,如果我尝试将 throw 异常标志设置为 true,它会抛出以下消息:

"Could not load type 'CoreLib.Domain.MyClass' from assembly 'TestLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'."



获得可以拉回我可以填充的实际类型的东西的最佳策略是什么?先感谢您!

更新我试图将程序集引用添加到字符串名称,如下所示:
Type.GetType("System.Collections.Generic.List`1[CoreLib.Domain.MyClass,CoreLibrary]")

或者
coreLibAssembly.GetType("System.Collections.Generic.List`1[CoreLib.Domain.MyClass,CoreLibrary]")

两者都会导致一个空对象,或者如果我请求抛出一个异常,如果我没有指定程序集名称,我会得到相同的消息。我也尝试使用程序集绑定(bind)日志查看器,但列表中没有出现任何应用程序,并且在我运行我的代码后,应用程序中似乎没有出现任何内容(它在 nunit 执行的测试项目中)。

有什么想法吗?

最佳答案

您通常可以将字符串传递给 Type.GetType()。例如:

Type t = Type.GetType("System.Collections.Generic.Dictionary`2[System.String,System.Int32]");

我怀疑在您的情况下,CLR 不知道如何解析类型 CoreLib.Domain.MyClass .您可能需要通过指定程序集来帮助它,如本例中的 taken from MSDN :
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

如果在指定程序集后它仍然“爆炸”(下一次,建议您更好地定义它,例如使用特定错误、异常或堆栈跟踪:-) 尝试运行 Fusion Log Viewer 作为管理员 (否则它会静默失败)记录绑定(bind)失败。

关于.net - 如何通过类型名称获取泛型接口(interface)的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006562/

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