转DirectCast和CType的区别

STM32CubeMx+stm32f407+FreeRTOS+LAN8720实现LWIP以太网UDP TCP数据收发功能 单片机实现LWIP的调试 阅读详情
 
DirectCast和CType的区别

Introduction

我们何时该使用 CType, 何时又该使用 DirectCast, 哪一个更好? 一个简单的答案是: 对于值类型, DirectCast 的速度是 CType 的两倍, 引用类型则基本相同.

Background

CType 和 DirectCast 不是同一个东西. 只有 CType 能将一个对象转换成一个新类型的实例. 假设你要把 Integer 类型转换成 String 类型, 由于 Integer 和 String 之间没有继承关系, 必须建立一个新的 String 实例来存储这个数字对应的字符串. CType 可以做到, 而 DirectCast 不行. (Note: 也可以用 Convert.ToString 或 CStr 来实现)

Dim MyInt As Integer = 123
Dim MyString As String = CType(MyInt, String)
Dim MyString2 As String = DirectCast(MyInt, String) ' This will not work

DirectCast 和 CType 的共同之处在于它们都能将对象转换成一个和原对象有继承 (Inherit) 或实现 (Implement) 关系的类型. 比如, 如果你有一个字符串存在 Object 变量里, 你可以用 DirectCast 或 CType 来将它转换成 String 类型, 因为 String 继承于 Object. 此例中, 内存中的数据并没有被改变或处理.

Dim MyObject As Object = "Hello World"
Dim MyString1 As String = CType(MyObject, String)
Dim MyString2 As String = DirectCast(MyObject, String)

The danger: 使用 DirectCast 之前你必须知道要处理的是什么类型. 如果你要把一个 Object 变量用 DirectCast 转换成 String, 你必须确定这个变量确实包含一个 String (或者为 Nothing). 如果它包含一个 Integer 之类的东西, 会抛出一个异常.

我们可以用 TypeOf 运算符来检查能否使用 DirectCast:

If TypeOf MyObject Is String Then

现在, 当你要进行基于继承和实现的转换时, 你有两个选择: DirectCast 和 CType. 哪一个更好呢?

The Answer

答案是 DirectCast. .NET 文档中说: DirectCast 不使用 Visual Basic 运行时辅助例程来进行转换, 所以可以提供比 CType 更好的效率.

文中 包 含的工程对各种情况进行了测试: DirectCast vs. CType, 值类型和引用类型. 引用类型指 Form、Control、String 和 Class 等, 值类型指 Integer, Double 和 Structure 等. 下面的测试结果是将每项转换进行 100 万次所需的毫秒数:

DirectCast, 引用类型:

8.7885

CType, 引用类型:

11.718

DirectCast, 值类型:

18.5535

CType, 值类型:

39.06

结论: DirectCast 对值类型的效率几乎是 CType 的两倍, 对引用类型也比 CType 效率好一点.

Note: 随后的测试的结果相近, 读者可以自己试一下.

另外一个使用 DirectCast 的原因是, 它不是基于 VB.NET 的特定实现, 因此可以更容易地移植到其它语言. 因此 C#... 等程序员可能会更容易读懂你的程序.

1.2 机器人控制系统软硬件平台 工业机器人的软硬件平台架构是影响工业机器人性能和效率的重要因素。良好的软硬件平台架构可以帮助工业机器人更加稳定和高效地完成工作,提高生产效率。正确的软硬件配置还可以提高工业机器人的灵活性和可靠性,使其能够更好地适应不断变化的生产环境。 同时,工业机器人的软硬件平台架构还可以影响工业机器人的安全性和维护成本。如果软硬件平台架构不合适,工业机器人可能出现故障或安全隐患,需要大量的维护和维修费用。因此,选择适当的软硬件平台架构对于确保工业机器人的高效运行和长期使用是非常重要的。 阅读详情

相关推荐

HFSS 3D LAOUT PCB 裁剪,差分线,过孔仿真和优化

我本身不是做天线设计的,所以HFSS这个软件给我主要还是做PCB级别的高速信号完整性仿真,一般2.5D的仿真软件无法对过孔和跨平面进行仿真。所以要借助三维电磁软件进行。今天就针对PCB进行裁剪。为什么要裁剪?以为如果把整个PCB一起仿真的话,应该要好几个月吧。所以为了加快仿真速度,必须进行裁剪仿真。①candence的PCB可以直接导入。那么先导入brd文件,file-import-candence结果如下②点击cutout,选中要仿真的net和参考平面。这里最好选creat new不然会把原文件覆盖掉。注

gjatwfn的专栏 1万+

DirectCast 介绍基于继承或实现的类型转换操作。

Visual Basic 语言参考 DirectCast 介绍基于继承或实现的类型转换操作。 备注 在 Object 数据类型之间来回转换时,DirectCast 不使用 Visual Basic 运行时帮助器例程进行转换,因此它可以提供比 CType 更好一些的性能。 使用 DirectCast 关键字的方法与使用 CType 函数和 TryCast 关键字...

weixin_30872499的博客 224

从HAL库SPI状态机机制剖析:为什么你的DMA发送会卡在BUSY状态?

本文深入剖析了STM32 HAL库中SPI状态机机制导致DMA发送卡在BUSY状态的常见问题。通过分析状态机设计原理,揭示了混合使用阻塞方式和DMA方式时状态切换冲突的根源,并提供了三种实战解决方案:正确配置SPI中断、使用HAL_SPI_Abort()函数以及手动管理状态机,帮助开发者实现稳定流畅的SPI DMA通信。

bush的博客 268

关于vb.net的 CType/DirectCast/TryCast和C#中的as/()

关于vb.net的 CType/DirectCast/TryCast和C#中的as/()2009年05月03日 星期日 10:06vb.net中三种转换[CType/DirectCast/TryCast],到了C#下面TryCast对应as,但是DirectCast +TryCast都变成了(type)var 一种形式, 看来vb.net和C#不完全相等啊,不知道大

totty2006的专栏 2647

Ubuntu环境下读取罗技G29方向盘信息

Ubuntu环境下读取罗技G29方向盘信息

工大机器人工作室 3476

TouchGFX使用教程(三)

TouchGFX使用教程(三)界面事件控件修改方法图片等资源放置位置 界面事件 控件修改方法 图片等资源放置位置

yuanzhan11的专栏 6972

请问 CType和DirectCast函数有何区别

DirectCast 关键字引入类型转换操作。该关键字的使用方法与 CType 关键字相同,如下列所示: Dim Q As Object = 2.37 ' Requires Option Strict to be Off. Dim I As Integer = CType(Q, Integer) ' Succeeds. Dim J As Integer = DirectCast(Q,...

weixin_30794499的博客 198

akamai3简单分析

akamai流程的简单分析

记录一些web逆向的过程 918

VB.net类型间的转换

VB.net提供了两种转型运算符:DirectCast 和CType Dim button As RadioButton = DirectCast(sender, RadioButton) Dim button As RadioButton = CType(sender, RadioButton) DirectCast是首选的,因为它通常可以产生更高效的代码,也能更好地保留类型安全 但

jCuckoo的专栏 3561

实用指南:制作通用的INCA和CANape兼容A2L文件

A2L(ASAM MCD-2 Measurement and Calibration Data)文件是描述ECU(电子控制单元)测量和校准数据的标准文件格式。在标定工作中,A2L文件扮演着极为重要的角色,它定义了测量通道、校准参数等关键信息,为工程师提供了统一的描述方式。INCA和CANape是两种常见的汽车电子系统标定工具,分别由ETAS和Vector公司开发。它们在汽车电子系统的开发和调试过程中发挥着重要作用,提供了丰富的标定功能和用户友好的界面。

一直在水些技术小文 2924

02-Redis 核心特性与数据结构详解:揭秘高性能的技术内核

本文深度拆解 Redis 高性能的技术内核:揭秘其凭“内存存储 + C 语言开发” 实现微秒级延迟、10 万 + QPS 的性能优势;详解 5 种基础数据类型(String/Hash 等)与 4 种扩展数据类型(Stream/Geospatial 等)的特性及场景;还介绍多语言支持、RDB/AOF 持久化、主从复制 / 哨兵 / 集群等高可用方案,助读者掌握 Redis 技术核心与实践逻辑。

蜗牛老师,专注编程领域 997

VB.NET三大类型转换神器:DirectCast、CType、TryCast深度解析(附避坑指南)

依赖VB运行时定义的转换规则,支持任意数据类型(包括无继承关系的类型),通过内联编译优化性能。:适用于已知类型严格匹配的场景(如Excel Range.Value返回的本身就是。:可处理更广泛的类型转换(如值类型与引用类型间的转换),但需确保转换逻辑有效。:若转换失败(如Range.Value返回非数组),抛出。:仅支持引用类型(如类、接口),要求继承或实现关系。非标准转换(如动态数据类型),但需预判转换失败风险。:若转换失败(如Range.Value实际返回。的转换可能无效(因数组元素可能是值类型)。

fsyuheduo的博客 977

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od

KJ.JK 285

转DirectCast和CType的区别 vb.net

<br />DirectCast和CType的区别<br /><br />Introduction<br />我们何时该使用 CType, 何时又该使用 DirectCast, 哪一个更好? 一个简单的答案是: 对于值类型, DirectCast 的速度是 CType 的两倍, 引用类型则基本相同.<br />Background <br />CType 和 DirectCast 不是同一个东西. 只有 CType 能将一个对象转换成一个新类型的实例. 假设你要把 Integer 类型转换成 String

2432

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

DirectCast和CType的区别

摘于网络:DirectCast 关键字引入类型转换操作。该关键字的使用方法与 CType 关键字相同,如下列所示:Dim Q As Object = 2.37 Requires Option Strict to be Off.Dim I As Integer = CType(Q, Integer) Succeeds.Dim J As Integer = Direct

快乐乔巴的专栏 1473

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

DirectCast和CType还是有点区别

差别:只要定义了表达式与类型之间的有效转换,CType 即可成功,而 DirectCast 则要求对象变量的运行时类型与指定的类型相同。性能:     如果表达式的指定类型和运行时类型相同,则 DirectCast 的运行时性能比 CType 的运行时性能好。        Dim Q As Object = 2.37                      Requires Optio

hudan的专栏 1405

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

CType, DirectCast, TryCast语句

CType, DirectCast, TryCast语句 这三个都是类型转换函数,将一个对象的类型转换为另一个类型.CType和DirectCast是以前版本就有的, TryCast则是Visual Basic 2005才新加入的.它们的一般用法如下: Dimpasproduct p=CType(obj,Product) p=Direc...

weixin_34128501的博客 113

.vb.net中三种转换[CType/DirectCast/TryCast]

vb.net中三种转换[CType/DirectCast/TryCast],到了C#下面TryCast对应as,但是DirectCast +TryCast都变成了(type)var 一种形式, 看来vb.net和C#不完全相等啊,不知道大家怎么理解 三种转换看这个列表就能

caolijunmingyan的专栏 9750

ctype--数据类型转换函数——vb.net

CType 是内联编译的,这意味着转换代码是计算表达式的代码的一部分。下面是类型转换关键字的对比。

山水CAD 二次开发 1215

VB.NET学习笔记--类型转换

1。转换函数 DirectCast: 基于继承或实现的类型转换操作。 CType: TryCast: 在 Object 数据类型之间来回转换时,DirectCast 不使用 Visual Basic 运行时帮助器例程进行转换,因此它可以提供比 CType 更好一些的性能。 使用 DirectCast 关键字的方法与使用 CType 函数和 TryCast 关键字相同。提供一个表达式作为第一个参数,

.NET寺庙 1582

vb.net中三种转换 <CType> <DirectCast> <TryCast>

vb.net中三种转换[CType/DirectCast/TryCast],到了C#下面TryCast对应as,但是DirectCast +TryCast都变成了(type)var 一种形式,  看来vb.net和C#不完全相等啊,不知道大家怎么理解 三种转换看这个列表就能知道区别了:  CType 函数  任何数据类型  必须在两种数据类型之间定义扩大转换或收缩转换  引发 In

Chobits的专栏 2512

vb.net中类型转换函数

一、函数名确定它返回的值的数据类型,如下表所示。函数名 返回数据类型 expression 参数范围 CBool Boolean 数据类型 (Visual Basic) 任何有效的 Char、String 或数值表达式。 CByte Byte 数据类型 (Visual Basic) 0 到 255(无符号);舍入小数部分。1 CChar Char 数据类型 (Visual Basic) 任何有

hwj1107的专栏 3922
上一篇: 转 sp.net 类库中使用ConfigurationManager.ConnectionStrings
下一篇: 轉DataGridView的绑定
cxlooing
博客等级 码龄18年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值