vb.net - VB.NET 中 DirectCast() 和 CType() 之间的区别

标签 vb.net ctype directcast

我是一位经验丰富的 C/C++/C# 程序员,刚刚接触 VB.NET。我通常使用 CType(以及 CInt、CBool​​、CStr)进行强制转换,因为它的字符较少,并且是我接触到的第一种强制转换方式,但我也知道 DirectCast 和 TryCast。

简单来说,DirectCast 和 CType 之间有什么区别( Actor 效果、性能等)吗?我理解 TryCast 的想法。

最佳答案

首先要注意的是 VB.NET 没有直接模拟 C# 的 (type)instance 转换机制。我提出这一点是因为它可以作为比较两个 VB.NET 运算符的起点和通用引用(它们是运算符,而不是函数,即使它们具有函数语义)。

DirectCast() 比 C# 转换运算符更严格。仅当正在转换的项目已经是您要转换到的类型时,它才允许您进行转换。我相信它仍然会取消装箱值类型,但否则它不会进行任何转换。例如,您无法像 C# (int) 转换那样从 short 转换为 int。但是,如果您的基础 IEnumerable 对象变量确实是 Array,则可以从 IEnumerable 转换为数组。当然,您可以从 Object 转换为任何内容,假设您的对象实例的类型确实位于继承树中的转换类型下方。

这是可取的,因为它更快。需要进行的转换和类型检查较少。

CType() 不如 C# 转换运算符严格。它可以完成简单 (int) 风格转换无法完成的事情,例如将字符串转换为整数。它的功能与在 C# 中调用 Convert.To___() 一样强大,其中 ___ 是转换的目标类型。

这是理想的,因为它非常强大。然而,这种能力是以性能为代价的。它不如 DirectCast() 或 C# 的强制转换运算符快,因为它可能需要做大量工作才能完成强制转换。一般来说,如果可以的话,您应该更喜欢 DirectCast()

最后,您错过了一个转换运算符:TryCast(),它是 C# 的 as 运算符的直接模拟。

关于vb.net - VB.NET 中 DirectCast() 和 CType() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3056514/

相关文章:

html - 如何在网页上嵌入用VB构建的游戏

c# - GC.收集()

.net - 类型为 'System.NullReferenceException' 的未处理异常 - 具有结构

vb.net - 如何在 VB.NET 中进行 C 风格转换?

vb.net - VBScript 与 VB.NET,语法相同吗?

python - 从 python 2.x 切换到 python 3 时出现字符串操作问题

c - ctype.h 是否仍然需要 unsigned char?

c - 从文件中的单词中删除字母 C - 有问题的符号

vb.net - 在动态表单中,如何将文本框 (tbRef) 的内容链接到随之生成的按钮?