使用 Assembly.LoadFrom 加载泛型类型

2024-04-14

参考 Jon Skeet 的回答:将实例化的 System.Type 作为泛型类的类型参数传递 https://stackoverflow.com/q/266115/592111

我需要根据泛型类型的名称以及作为泛型类型参数的类型名称来加载泛型类型。所以从乔恩的例子来看,我会:

string genName = "MyNamespace.Generic";
string itemName = "System.String";

我有以下代码,它将根据类型名称和完全合理的程序集名称/路径加载类型。它适用于“简单类型”

public Type GetTypeOf(string assemblyPath, string className)
{
    var asmbly = System.Reflection.Assembly.LoadFrom(assemblyPath); //open assembly
    return asmbly.GetType(className, true, true); //throws error, not case sensitive
}

我希望按如下方式使用它:

//Get the types
var genTyp = GetTypeOf(genPath,genName);
var itemTyp = GetTypeOf(itemPath,itemName);

//Put them together:
var typ = getType.MakeGenericType(itemTyp);

这落在第一行System.TypeLoadException陈述:

Could not load type <TypeName here> from assembly <AssemblyName here>

我尝试了多种创建泛型的排列,包括提供完整的类名MyNamespace.Generic<System.String>。当我指定从包含泛型类型的同一程序集中加载非泛型类型时,它可以正常工作。


不幸的是,将 GetType 与泛型类型一起使用不太可读。即使对于通用参数,您也必须使用完整限定的类型名称:。例如,TestType<object>读起来是这样的:

TestType`1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

您的示例代码不包含类型声明,因此您必须解决这个问题。您可以尝试以下代码片段并查看调试器的内容:

string typeName = typeof(MyNamespace.Generic<>).Name;
string fullTypeName = typeof(MyNamespace.Generic<>).FullName;

结果应该可以帮助您获得正确的类型名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Assembly.LoadFrom 加载泛型类型 的相关文章

随机推荐

  • 是否可以定义带有可变参数的宏,并获取每个参数的类型?

    下面是一个明显的可变参数函数 def fun xs Any 我们可以用类似的方式定义一个宏 def funImpl c Context xs c Expr Any fun 1 1 1 0 但在本例中 所有参数都键入为Any 事实上 编译器在
  • PGP TarBall 文件签名密钥验证失败,未找到有效的 OpenPGP 数据

    这是我第一次认为我最好检查我要安装的绑定软件的密钥 所以我下载了我认为是 OpenPGP 密钥的东西 wget ftp ftp isc org isc bind9 9 9 4 bind 9 9 4 tar gz sha1 asc 然后我尝试
  • Typeof/instanceof 类型别名

    我想知道是否可以确定打字稿中对象的类型 请考虑下面的例子 type T number boolean class B foo T 3 true bar boolean return this foo instanceof T typeof
  • 对整数向量使用 _mm_shuffle_ps 的影响

    SSE内在函数包括 mm shuffle ps xmm1 xmm2 immx它允许人们从中选择 2 个元素xmm1与 2 个元素连接xmm2 然而 这是针对浮点数的 由 ps 单个包装 但是 如果你转换你的压缩整数 m128i 那么你可以使
  • java GC如何清理相互关联的对象

    谁能告诉我相互引用的对象会怎样 java的GC是如何解决这个问题的 提前致谢 如果您有对象 A 和 B 并且满足以下条件 A 对 B 的引用 B 对 A 的引用 没有其他对象引用其中任何一个 它们不是根对象 例如常量池中的对象等 然后 这两
  • VBSCRIPT 将文件上传到服务器

    我正在尝试制作一个脚本来将任何文件上传到简单的 html php 上传表单 我找不到任何不使用 ASP 的工作脚本 这是我最接近的代码 VBS Dim strURL Dim HTTP Dim dataFile Dim dataRequest
  • iOS(React Native):使用 React 导航呈现的标题顶部不必要的空间

    路由配置 Author Rahul Date 25 Feb 2018 Routes flow import React from react import View Text from react native import StackNa
  • Oracle 11g 向后兼容较旧的 Oracle 版本

    我们的组织正计划将其大部分 Oracle 服务器和客户端升级到 11g 第 2 版 但我们的一个客户端系统仍然使用oracle 8i安装 我们可以从oracle 11g客户端访问Oracle 8i的对象吗 一些博客说它应该起作用 而另一些则
  • 从表中删除<字段最大数量的记录并保留最大数量

    我知道这听起来相当令人困惑 但我不知道如何更好地解释它 我有一个简化的表格如下 DB Type ID Table1 1 Table1 2 Table1 3 Table1 4 Table1 5 Table2 6 Table2 7 Table2
  • 如何使用 Flutter Navigator 推送多条路由

    如果我将颤动中的路线推送到应用程序的深处 是否有任何方法可以提供额外的路线 以便可以自定义后退 向上导航 您可以致电Navigator push https api flutter dev flutter widgets Navigator
  • C++ 中奇怪的方括号表示法,看起来有点像 foreach 循环

    代码如下所示 auto generateHash std vector
  • Java获取无线网络的SSID等信息

    我正在尝试用 Java 获取无线网络设备的 SSID 我尝试了官方网络教程http java sun com docs books tutorial networking nifs retriving html http java sun
  • 无需root设备即可卸载系统应用程序

    有没有办法在不root设备的情况下将apk推送到系统 应用程序文件夹 我找到了几种在 root 设备上执行此操作的方法 但我正在寻找一种无需先 root 设备即可执行此操作的方法 如果有任何区别 我想在三星 S4 上执行此操作并使用 twr
  • 如何在远程服务器上使用 gpg 签名密钥?

    有没有办法在Linux上通过gpg程序 命令行工具 在远程服务器中使用gpg密钥进行签名 我正在使用 gpg 使用测试密钥在本地主机上签署二进制文件 现在我想使用服务器访问的相同类型的密钥 我正在通过更改 gpg 工具的参数来寻找实现 你可
  • BIM服务器数据库访问

    我是一名 Java 开发人员 最近我公司正计划使用BIM Server 概念是 BIM 服务器将与我们当前的项目集成 我们将通过一些 API 访问 BIM 服务器数据库 我与本地 BIM 服务器建立连接 创建项目并使用 JsonBimSer
  • 如何找到字符列的MAX()值?

    我们有遗留表 其中复合键的列部分之一手动填充了值 code 001 002 099 etc 现在 我们有一个功能请求 其中我们必须知道 MAX code 才能为用户提供下一个可能的值 在示例情况下 上面的下一个值是 100 我们尝试对此进行
  • 禁用除第一列之外的每一列的排序

    我目前正在将数据表用于自定义系统 我想对除第一列之外的每一列禁用排序 我尝试使用以下代码 当我添加用逗号分隔的值时 它工作正常 aoColumnDefs bSortable false aTargets 1 2 3 4 但我的表列号因每个单
  • SQL Server 中的条件 WHERE 子句

    我正在创建一个 SQL 查询 其中需要条件where条款 它应该是这样的 SELECT DateAppr TimeAppr TAT LaserLTR Permit LtrPrinter JobName JobNumber JobDesc A
  • 如何从 Lambda 表达式的字符串动态创建方法

    我的最终目标是创建一个函数 将方法名称动态传递给 Hangfire 库中的类 例如 以下是有效的非动态代码 RecurringJob AddOrUpdate gt myFunction Cron Hourly AddOrUpdate 第一个
  • 使用 Assembly.LoadFrom 加载泛型类型

    参考 Jon Skeet 的回答 将实例化的 System Type 作为泛型类的类型参数传递 https stackoverflow com q 266115 592111 我需要根据泛型类型的名称以及作为泛型类型参数的类型名称来加载泛型