从字符串名称在程序集中创建类实例

2023-11-29

我不确定这是否可行,而且我对在 C#.NET 中使用程序集还很陌生。

我想做的是在提供该类的字符串名称时创建该类的实例。像这样的事情:

using MyAssembly;

namespace MyNameSpace
{
     Class MyClass
     {
          int MyValue1;
          int MyValue2;

          public MyClass(string myTypeName)
          {
               foreach(Type type in MyAssembly)
               {
                    if((string)type == myTypeName)
                    {
                         //create a new instance of the type
                    }
               }
               AssignInitialValues(//the type created above)
          }

          //Here I use an abstract type which the type above inherits from
          private void AssignInitialValues(AbstractType myClass)
          {
               this.value1 = myClass.value1;
               this.value2 = myClass.value2;
          }
      }
 }

显然,您无法将字符串与类型进行比较,但它说明了我正在尝试做的事情:创建在与提供的字符串不同的程序集中找到的类型。

有什么想法吗?


EDIT:

尝试后:

var myObject = (AbstractType) Activator.CreateInstance(null, myTypeName);
AssignInitialValues(myObject);

我收到一些错误:

  • 可访问性不一致:参数类型“MyAssembly.AbstractType”比方法“MyNameSpace.MyClass.AssignInitialValues(MyAssembly.AstractType)”更难访问
  • “MyAssembly.AstractType”由于其保护级别而无法访问
  • 找不到类型或命名空间名称“MyAssembly”(您是否缺少 using 指令或程序集引用?)
  • 找不到类型或命名空间名称“AbstractType”(是否缺少 using 指令或程序集引用?)

不完全确定为什么找不到程序集;我添加了对程序集的引用,并对程序集中的命名空间使用了“使用指令”。至于保护级别,它调用只能是公共的类(或者更确切地说是类的构造函数)。

有关问题出在哪里的任何线索吗?


UPDATE:

在浏览了几篇关于 SO 的文章后,我发现了这一点:https://stackoverflow.com/a/1632609/360627制作AbstractTypepublic 类解决了可访问性不一致的问题。

新的编译器错误是这样的:

无法将类型“System.Runtime.Remoting.ObjectHandle”转换为“MyAssembly.AbstractType”

它引用的行是这一行:

var myObject = (AbstractType) Activator.CreateInstance(null, myTypeName);

Using .Unwrap()让我克服这个错误,我认为这是正确的方法(不确定)。但是,在运行程序时,调用此代码时我会收到 TypeLoadException。

TypeLoadException:无法从程序集“MyNameSpace”加载类型“AbstractType”...

我立即可以发现它正在寻找的类型是正确的,但它正在寻找的程序集是错误的。查找Activator.CreateInstance(String, String)方法显示,第一个参数为 null 意味着该方法将在执行程序集中查找。这与原始帖子中所需的行为相反。

我尝试过使用MyAssembly作为第一个参数,但这会产生错误:

“MyAssembly”是一个“命名空间”,但像“变量”一样使用

I think这是由于MyAssembly不是一个字符串。但是如果我尝试'MyAssembly'我收到以下编译器错误:

  • 字符文字中的字符过多
  • 'System.Activator.CreateInstance(System.ActivationContext, string[])' 的最佳重载方法匹配有一些无效参数
  • 参数 1:无法从 'char' 转换为 'System.ActivationContext'
  • 参数 2:无法从 'string' 转换为 'string[]'

在我看来,它试图使用错误的重载。

关于如何解决这个问题有什么想法吗?


如果您有类型的完全限定名称,则不需要此名称foreach完全循环:

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

从字符串名称在程序集中创建类实例 的相关文章

  • 如何有效地测试action是否用属性(AuthorizeAttribute)修饰?

    我正在使用 MVC 并且有一种情况OnActionExecuting 我需要确定即将执行的Action方法是否用属性修饰 AuthorizeAttribute尤其 我不是问授权是否成功 失败 而是问该方法是否需要授权 对于非 MVC 人员
  • C# SMO 远程数据库备份到本地机器

    我有一个执行 SQL 数据库备份和恢复的应用程序 这在本地计算机上运行良好 但是如果我针对另一台计算机上托管的 SQL 服务器运行此应用程序 则会出现以下错误 Microsoft SqlServer Management Smo Faile
  • 如果我每次创建粒子时都强制重新初始化每个粒子,我是否应该使用粒子池

    我正在 XNA4 中创建一个粒子系统 但遇到了问题 我的第一个粒子系统是一个简单的粒子列表 其实例是在需要时创建的 但后来我读到了有关使用池的内容 我的第二个系统由一个充满粒子的池和一个发射器 控制器组成 我的池非常基本 这是代码 clas
  • 使用 C# 启动 Outlook

    我可以让 C 在代码中启动 Outlook 吗 在 VB6 中 我们使用对象 Outlook Application 并编写 Set oOutlook CreateObject Outlook Application Set oNameSp
  • 使用 Rhino Mocks 模拟集合

    所以我猜这是很多人想做的事情 模拟集合 过去我用 Rhino 做过这样的事情 var col mock MockRepository GenerateMock
  • std::string substr 方法问题

    你好 我正在写这个方法 我希望它从给定缓冲区中提取给定位置的一部分 我有一个像这样的字符串something one something two我想要得到 一个 这是我的想法 static std string Utils getHeade
  • 隐式转换和编译器的不同行为

    Motivated by this question https stackoverflow com q 51972738 5800831 I created the following code struct X X int struct
  • 不使用 DAO 压缩 Microsoft Access 数据库

    我用CDatabase类开一个ACCDB访问数据库 司机是 T Microsoft Access Driver mdb accdb 我可以打开并使用数据库 已经这样做很多年了 if DatabaseExist m strMDBPath AJ
  • autofac 中的条件组件注册

    是否可以根据其他组件的状态有条件地注册组件 就像是 ContainerBuilder RegisterConditionally
  • 使用 itextSharp 5.3.3 对 Pdf 文档进行数字签名和验证

    我正在尝试使用 iTextSharp 5 3 3 在服务器 c 上进行数字签名和验证 pdf 文档 我使用 DigiSign 在线工具 生成了 Pfx 文件 然后使用 Windows 生成证书 cer 文件
  • 更改为通用接口对性能的影响

    我使用 Visual Studio 使用 C NET 开发应用程序 ReSharper 在我的方法原型中经常建议我用更通用的类型替换输入参数的类型 例如 如果我仅在方法主体中使用带有 foreach 的列表 则使用 List 和 IEnum
  • 在另一个类中使用一个类对象?

    我正在用 c 制作应用程序 在该应用程序中 我有一个类DataCapture cs 在同一个应用程序中 我有另一个类Listner cs 在 Listner cs 类中 我想使用以下对象DataCapture cs不创建新对象DataCap
  • ld: 无法对非 PE 输出文件执行 PE 操作错误

    我是操作系统编程的新手 我正在读一本书 其中给出了一个简单的内核示例 如下所示 main char video memory 0xb8000 video memory X 为了编译这个名为 kernel c 的文件 我在 Windows 7
  • 代表和结构的速度问题

    我遇到了一些与结构和委托有关的速度问题 采用以下控制台应用程序代码 public delegate string StringGetter public class LocalString public LocalString string
  • 使用智能指针在大型对象集合中创建多个索引

    我正在为一个大型对象集合创建多个索引 即使用不同的键 对象可以改变 集合可以缩小和增长 到目前为止我的想法 保留某种指向对象的指针的多个集合 使用set代替map以获得更好的封装 使用 unordered set 可以很好地扩展大型数据集
  • 使用 System.Windows.Forms.Timer.Start()/Stop() 与 Enabled = true/false

    假设我们在 Net 应用程序中使用 System Windows Forms Timer 在计时器上使用 Start 和 Stop 方法与使用 Enabled 属性之间有什么有意义的区别吗 例如 如果我们希望在进行某些处理时暂停计时器 我们
  • 如何通过反射获取透明代理的属性值?

    我的代码接收透明代理而不是原始实例 虽然这var type obj GetType 产生原始类的类型 下面的代码抛出TargetException 对象与目标类型不匹配 var value property GetValue obj nul
  • 您可以从 AuthorizeAttribute 返回 HTTP 响应而不引发异常吗?

    我在各种控制器上使用 AuthorizeAttribute 可能需要根据请求本身的某些属性返回 403 或 429 请求过多 我完全在自定义 OnAuthorization 实现中实现了它 然后在必要时抛出一个带有适当响应代码的新 Http
  • 偏专业化朋友声明

    在下面的代码中 template
  • 从 C# 应用程序调用 ASP.net Web 服务

    我有个问题 我如何调用 Web 服务并从 C 桌面应用程序获取结果 我正在制作一个桌面应用程序 我希望它能够连接到我的在线 ASP net Web 服务 这怎么可能 在 解决方案资源管理器 中 右键单击项目节点并选择 添加 Service参

随机推荐

  • 如何循环目录中的文件并更改路径并向文件名添加后缀

    我需要编写一个脚本 用不同的参数启动我的程序 我开始我的程序 MyProgram exe Data data1 txt Logs data1 Log txt 这是我想做的事情的伪代码 for each filename in Data do
  • 用于测量 Java 代码的经验计算复杂性的工具?

    我有一些 Java 代码 我希望测量它们的经验计算复杂性 有一个趋势教授以编译输入为输入的工具C C 程式 是否有类似于 trend prof 的工具 可以将编译后的 Java 程序作为输入 声纳常用 http www sonarsourc
  • LEFT JOIN 仅第一行

    我读过很多关于仅获取左连接的第一行的线程 但是 由于某种原因 这对我不起作用 这是我的结构 当然是简化的 Feeds id title content 1 Feed 1 Artists artist id artist name 1 Art
  • ASP.NET MVC:路由到 URL

    在 MVC 中获取路由的 URL 相对或绝对 的最简单方法是什么 我在 SO 上看到了这段代码 但它看起来有点冗长 并且没有枚举 RouteTable Example List
  • 您可以从 html 元素触发 Sencha Touch 中的操作/事件吗?

    我有一个 Sencha 选项卡面板 每个选项卡通过 ajax 加载 html 内容 其中一个组件是帖子 列表 访问者可以使用它再次向下钻取以阅读整个帖子 我的问题是 我可以通过html触发视图切换吗 或者我应该通过 JSON 加载帖子数据
  • Objective-C 中成员变量名称中的下划线表示什么? [复制]

    这个问题在这里已经有答案了 可能的重复 在 Objective C 中使用下划线作为属性名称前缀 我是一名 C C 开发人员 正在学习 Objective C 最近我开始学习在网上找到的教程 代码如下 interface MapDemoAn
  • android eclipse 更新,现在应用程序在尝试运行时崩溃

    我的应用程序正在运行 我没有更改源代码中的任何内容 Eclipse 已更新 现在当我尝试运行该应用程序时 它无法打开 并且会显示错误消息 您必须强制关闭它 它甚至没有像我以前见过的其他等待选项 我知道这信息很少 但这就是我所拥有的一切 这就
  • C# 事件和线程安全

    我经常听到 读到以下建议 在检查事件之前 请务必先复制该事件null并开火 这将消除事件变为线程的潜在问题null在检查 null 的位置和触发事件的位置之间的位置 Copy the event delegate before checki
  • iPhone UIViewController 内的 UINavigationController

    Steps 项目清单 创建一个名为 Nav 的项目 创建一个新的UIViewControllerBaseViewController 使用 XIB 和 FirstViewController 使用 XIB In the NavAppDele
  • 如何在Linux中操作页面缓存?

    我想知道Page Cache中缓存了哪些文件 并且想实用地释放特定文件的缓存空间 如果需要的话 我可以编写内核模块 甚至修改内核代码 有人能给我一些线索吗 首先 内核不会维护页面缓存中所有文件的主列表 因为它不需要此类信息 相反 给定一个索
  • 如何使用 PySpark 删除数据框中基于多个过滤器的列?

    我有一个单元格可以具有的有效值列表 如果一列中的一个单元格无效 我需要删除整列 我知道有删除特定列中的行的答案 但在这里我将删除整个列 即使其中的一个单元格无效 有效 无效的条件是一个单元格只能有三个值 Messi Ronaldo Virg
  • 根据浏览器语言在

    我是 HTML 新手 我想在禁用 JavaScript 时显示一条消息 所以我把消息放进去
  • 如何将字符数组转换为字符串?

    转换 C string使用 char 数组非常简单c str字符串的函数然后做strcpy 然而 如何反其道而行之呢 我有一个 char 数组 例如 char arr This is a test 转换回 string str This i
  • 在 Windows 中将 Bonjour (dns_sd.h) 库添加到 Qt

    我一直在尝试正确添加Apple提供的开源dns sd h库 我正在编写一个使用 BonjourRegistrar 类的程序 如下所示 链接文本 我已经在Mac环境上编写了我的程序 现在我正在尝试将其移植到Windows Bonjour SD
  • 在 Python 中将 .CSV 文件转换为 .DTA 文件

    我希望通过 Python 自动化将许多 CSV 文件转换为 DTA 文件的过程 DTA 文件是由 Stata 统计语言处理的文件类型 然而 我还没有找到一种方法来做到这一点 The R语言有写 dta 它允许将 R 中的数据帧转换为 dta
  • Qt 5.5 和 OpenGL:检索设备信息

    我编写了一个 Qt 5 5 应用程序 它以 QOpenGLWidget 的形式使用 OpenGL 现在我希望用户可以从应用程序中看到他们的设备信息 我的意思是 卡的名称 例如 GT 640 Vendor GPU 总内存 驱动版本 扩展列表
  • 检测没有磁盘空间iPhone SDK

    假设我需要将许多图像写入iPhone文件系统 我需要找到足够的空间将图像写入磁盘 可以使用iPhone SDK吗 对的 这是可能的 请参阅以下教程 使用强大的 google 搜索引擎找到 http iphoneincubator com b
  • 如何使用 insert_many 安全地忽略重复的键错误

    当将 insert many 与 pymongo 一起使用时 我需要忽略重复插入 其中重复项基于索引 我在 stackoverflow 上看到过这个问题 但没有看到有用的答案 这是我的代码片段 try results mongo conne
  • 如何使用 JSP/Java 检测移动设备(iOS 和 Android)?

    只是想知道是否有人遇到过这个 基本上 我希望使用 JSP 检测 iOS 和 Android 并能够有条件地将 CSS 和 JS 文件添加到页面 有任何想法吗 一个非常简单的解决方案是 由于 else 语句非常短 因此仅当您只提供 iOS 和
  • 从字符串名称在程序集中创建类实例

    我不确定这是否可行 而且我对在 C NET 中使用程序集还很陌生 我想做的是在提供该类的字符串名称时创建该类的实例 像这样的事情 using MyAssembly namespace MyNameSpace Class MyClass in