我是一位经验丰富的 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/