使用类型变量进行强制转换

2023-11-23

下面的代码不起作用,我想知道如何动态地将实例转换为运行时确定的类型?

Convert.ChangeType() 返回一个仍需要转换的对象。所有 Invoke() GetConstructor() 或 Activator.CreateInstance() 的尝试也是如此,请参见下文。在某些时候,我需要显式地输入代码,我希望避免它或尽可能将其推出。

Type type = Type.GetType ("RandomChildClass");
Object obj = Activator.CreateInstance (type, new Object[]{ "argument" });
var instance = (type)obj;

我知道我可以创建一个方法来接受 ,但我仍然有同样的问题,不知道如何使用动态随机类型调用它使用类型变量转换变量


不可能使用Type value以确定表达式的类型。 (泛型类型参数与值不同,因为它们被编码到类型系统中。)

变量的值来自run-time代码执行,而表达式类型是编译时构造。不用说,编译发生在代码运行之前,因此使用变量进行强制转换是不可能的。

反射(尽管不方便)或dynamic(这基本上是更容易使用的反射)允​​许调用任意方法或针对通用对象类型表达式访问属性/字段 - 这有时被称为“后期绑定”。但是,那表达式的类型调用的操作仍然是对象。

接口可用于统一不同的类实现以实现正确的静态类型。然后,新创建的对象可以转换为所需的适用接口。就像其他表达式一样,类型是编译时构造(因此必须直接指定接口),但代码现在不受特定类的影响。

如果创建一个系统,使这些“动态类”直接在静态类型(C#)代码中使用,并且可以保证接口或将其限制在一个小集合中,那么使用接口可能是最干净的方法:例如var myAction = (IMyAction)obj。否则,请退回到动态访问 - 直接访问或在幕墙后面访问。

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

使用类型变量进行强制转换 的相关文章

  • 在 Web 浏览器中禁用 F5 [重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器的后退按钮 https stackoverflow com questions 961188 disable browsers back button 如何禁用浏览器上的 F5 刷新 htt
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • libtool 在 Ubuntu 13.04 上构建 thrift 0.9.1 时出错

    在 Ubuntu 13 04 上构建 thrift 0 9 1 支持 C C java C perl python 时出现此错误 configure 不带任何选项运行 make 不带任何选项运行 Making all in test mak
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • 如何设置消息队列的所有者?

    System Messaging MessageQueue 类不提供设置队列所有权的方法 如何以编程方式设置 MSMQ 消息队列的所有者 简短的答案是 p invoke 对 windows api 函数的调用MQSetQueueSecuri
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 如何在 EF Core 2.1 中定义外键关系

    我的 DAL 使用 EF Core 2 1 这就是我的模型的样子 一名用户只能拥有一种角色 Role entity kind of master public class Role public int RoleId get set pub
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • C++ 模板可以提供 N 个给定类的公共父类吗?

    我正在寻找一个 C 模板 它可以找到一组给定类的共同父级 例如 class Animal class Mammal public Animal class Fish public Animal class Cat public Mammal
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 将日期时间显示为 MM/dd/yyyy HH:mm 格式 C#

    在数据库中 日期时间以 MM dd yyyy HH mm ss 格式存储 但是 我想以 MM dd yyyy HH mm 格式显示日期时间 我通过使用 String Format 进行了尝试 txtCampaignStartDate Tex
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • 对静态文件的请求正在命中 ASP.NET MVC3 中的托管代码

    创建自定义 IHttpModules 时 我意识到对静态文件 例如 css 和 js 文件 的请求正在访问托管模块 可能图片也有同样的问题 IIS 不应该绕过 ASP NET 来获取文件系统中存在的文件吗 例如 public class M
  • 如何将字符串中的空格分隔数字序列转换为整数

    我正在尝试使用将字符串元素转换为整数stoiC 11 中的函数并将其用作参数pow函数 像这样 include
  • Android应用程序更新通知

    我一个月前将我的应用程序上传到 Android 市场 现在我已经上传了它的新版本 我的设备上安装了旧版本 但我没有收到更新通知 当我将应用程序更新到 Android Market 时 是否有任何选项可以向用户发送更新通知 不是默认情况下 市
  • 我应该通过任何方式避免 Django 中的多表(具体)继承吗?

    许多经验丰富的开发人员建议不要使用Django多表继承由于其性能不佳 Django 陷阱 具体继承 by 雅各布 卡普兰 莫斯 Django 的核心贡献者 几乎在所有情况下 抽象继承都是更好的方法 长期来看 我见过不少网站在负载下崩溃了 通
  • 如何使用 Java 邮件发送 html 消息

    我一直在从 Java 发送简单的电子邮件 没有问题 但我现在尝试发送一封 html 电子邮件 如下所示 MimeMessage message new MimeMessage Email getSession message setFrom
  • 如何在 Eclipse Mars 中禁用 css 警告“未知属性”?

    我在 css 文件中收到许多 未知属性 警告 这可能是由于我安装了 e fx clipse 2 0 和 Eclipse Web Developer Tools 如果我使用 e fx clipse css 编辑器打开 css 文件并添加 抑制
  • 删除特定字符串后的所有内容(文本的其余部分)

    我怎样才能删除像 gnirts 这样的字符串后面的所有内容 这可能会让您更好地理解 Before 之后 使用查找和替换 按 CTRL H 打开替换对话框 输入 gnirts 到Find what leave Replace with emp
  • 在不同的 .NET 框架之间共享记录器

    我正在创建一个可以在 Net Core 1 2 Net Core 2 0 和 NET Framework 4 6 之间共享的应用程序框架 所以我选择我的项目的目标框架为 NET Standard 在我的框架项目中 我有用于发送短信或电子邮件
  • 查找 Maven 模块化项目中未使用的代码

    我必须清理一个旧项目 一般知识是该项目包含许多我们可以删除的未使用的代码 这将减少一些麻烦并使维护变得更容易 我发现 Eclipse Core Tools 插件看起来是一个很棒的工具 但在我们的例子中 我们有一个 Maven2 项目 它分为
  • 使用 Mockito 模拟局部范围对象的方法

    我需要一些帮助 Example void method1 MyObject obj1 new MyObject obj1 method1 我想嘲笑obj1 method1 在我的测试中 但为了透明 所以我不想制作和更改代码 Mockito
  • 如何在OpenLayers中获取多边形的坐标

    我一直在寻找如何确定 OpenLayers 中组成多边形 要素 的点的坐标 假设我创建了一个像下面这样的多边形this例子 我需要知道组成多边形的点 这样我就可以将它们保存在某个地方 我敢打赌这很容易 我只是找不到任何东西 可能我不知道我应
  • ARM 未对齐内存访问解决方法

    我必须将源代码移植到运行 Linux 的 ARM 平台 不幸的是我遇到了未对齐的内存访问问题 源代码大量使用指针转换和访问 像下面这样的代码已经像病毒一样在代码库中传播 多亏了 gcc 我可以查明有问题的位置 Wcast align命令行选
  • scipy.io.wavfile.read 无法读取 24 位 .wav 文件

    看起来scipy io wavfile read无法读取 24 位 wav 文件 您知道如何处理它们吗 如果您的 wav 文件未压缩 您可以尝试readwav函数在这里 https gist github com WarrenWeckess
  • WordPress:媒体库网格模式无限加载

    所以这个问题很奇怪 因为对我来说 Wordpress 媒体库在仅网格模式下的 WordPress 管理菜单中不起作用 这是非常奇怪的问题 因为这个问题仅发生在 1 个帐户上 这将是昨天我尝试上传一堆的帐户 将图片添加到媒体库后出现错误 稍后
  • 计算可能的“蛇”密码

    我们都知道移动设备上的新密码屏幕 它由要连接的点矩阵组成 唯一的密码是点的向量 这些点可以连接到自身 但有以下限制 一个点只能连接到另外 1 个点 如果目标点和空闲点在同一条线上 则线路将被迫连接到更近的点 一个例子 由于之前没有连接中间点
  • ClojureScript 不需要 Clojure 的 defstruct 背后的原因是什么?

    defstructClojureScript 不支持 这似乎是设计使然 现在这可能实际上是 Clojure 语言中已弃用的部分 ClojureScript 的设计者只是希望每个人都继续前进 但这只是我的猜测 我的问题是 ClojureScr
  • MATLAB:使用“-append”标志时,将多个变量保存到“-v7.3”(HDF5) .mat 文件似乎更快。怎么会?

    NOTE 本问题涉及 2011 年旧 MATLAB 版本 R2009a 中观察到的问题 根据 2016 年 7 月的以下更新 MATLAB 中的问题 错误似乎不再存在 使用 R2016a 进行测试 向下滚动到问题末尾以查看更新 我正在使用
  • 根据联系人电话号码获取联系人照片 Android - 工作示例 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 安卓2 3 3 我查看了有关如何获取 联系人照片 的各种示例 但他们都不适合我 令人惊讶的是 我在 StackOVerFlow 上偶然发现了一段代码 我使用了它并且可以获取 照片 并将
  • 如何通过 socket.io 将图像发送到服务器?

    我一直在为此绞尽脑汁 但找不到合适的解决方案 我希望能够通过 socket io emmit 将图像上传到服务器 并稍后将它们保存到 MongoDB 数据库 我该怎么做呢 我见过有人用 base64 编码来做这件事 但我不知道它到底是如何工
  • 使用类型变量进行强制转换

    下面的代码不起作用 我想知道如何动态地将实例转换为运行时确定的类型 Convert ChangeType 返回一个仍需要转换的对象 所有 Invoke GetConstructor 或 Activator CreateInstance 的尝