首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DirectCast、CType、TryCast转换DataTypes

使用DirectCast、CType、TryCast转换DataTypes
EN

Stack Overflow用户
提问于 2010-04-24 15:14:51
回答 4查看 40.2K关注 0票数 41

自从2005年我从VB6迁移到VB.NET之后,我就一直在使用CType从一种数据类型转换到另一种数据类型。我这样做是因为它只是打字更快,曾经存在于VB6中,我不知道为什么我必须使用DirectCast,如果它们之间显然没有区别的话。

我偶尔使用TryCast,因为我知道有时强制转换可能会失败。然而,我无法理解CType和DirectCast之间的区别。

有人能用简单易懂的英语告诉我这两种语言(CType和DirectCast)有什么区别吗?添加在哪里使用什么的示例也会很有帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-24 23:07:24

TryCast和DirectCast是强制转换运算符,它们直接映射到CLR对强制转换的支持。它们可以快速地将基类型的对象转换为派生类型,或者拆开值类型的值。当转换不可能时,DirectCast抛出异常,如果转换失败,TryCast不返回任何内容。您通常希望使用DirectCast来捕获编程错误。

CType允许转换的超集,这是CLR不喜欢的。我能想到的最好的例子就是将字符串转换为数字或日期。例如:

代码语言:javascript
复制
Dim obj As Object
obj = "4/1/2010"
Dim dt As DateTime = CType(obj, DateTime)

如果Option Strict On生效,则必须使用它。如果它处于关闭状态,则可以直接执行此操作:

代码语言:javascript
复制
Option Strict Off
...
    Dim dt As DateTime = obj

当然非常方便,也是VB.NET作为一种动态类型语言遗留下来的一部分。但这并不是没有问题,在stackoverflow.com,这一天是独角兽日,但将是1月份的一天,届时英国人将进入字符串。意外的转换是CLR不直接允许这些转换的原因。显式的、从不令人惊讶的转换如下所示:

代码语言:javascript
复制
Dim dt As DateTime = DateTime.Parse(obj.ToString(), _
    System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormat)

你是否应该购买Try/DirectCast vs CType vs显式转换,这是个人的选择。如果您现在使用Option Strict On进行编程,那么您肯定应该开始使用Try/DirectCast。如果您因为喜欢动态类型的便利而喜欢VB.NET语言,那么请毫不犹豫地继续使用CType。

票数 56
EN

Stack Overflow用户

发布于 2010-04-24 15:23:59

对于值类型(integers...etc),DirectCast的速度是它的两倍,但是对于引用类型,它是一样的。

有关更多信息,请参阅this MSDN页面上的“转换函数、CType、DirectCast和System.Convert”部分。

票数 16
EN

Stack Overflow用户

发布于 2010-04-24 23:15:50

这个page很好地解释了这一点。

阅读它,我认为当您使用DirectCast时,您肯定可以在没有缩小或扩展的情况下进行转换(在本例中,是数值数据)。然而,CType将尝试转换为它,开发人员意识到缩小/扩展。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2703585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档