使用DirectCast,CType,TryCast转换数据类型

时间:2010-04-24 07:14:51

标签: vb.net casting directcast ctype

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

我偶尔会使用TryCast,因为我知道有时候施法会失败。但是我无法区分CType和DirectCast。

任何人都可以告诉我简单的简单英语有什么区别两者(CType和DirectCast)有什么区别?添加使用内容的示例也会有所帮助。

4 个答案:

答案 0 :(得分:53)

TryCast和DirectCast是直接映射到CLR支持转换的转换操作符。它们可以快速将基类型的对象强制转换为派生类型,或者取消装入值类型的值。当无法进行强制转换时,DirectCast会抛出异常,如果失败则TryCast返回Nothing。您通常希望利用DirectCast来捕获编程错误。

CType允许转换的超集,即CLR所fr的转换。我能想到的最好的例子是将字符串转换为数字或日期。例如:

Dim obj As Object
obj = "4/1/2010"
Dim dt As DateTime = CType(obj, DateTime)

如果Option Strict On生效,您必须使用哪个。如果它是关闭则可以直接执行:

Option Strict Off
...
    Dim dt As DateTime = obj

当然非常方便,也是VB.NET作为动态类型语言的遗产的一部分。但并非没有问题,那个日期是stackoverflow.com上的Unicorn日,但是将在1月份英国人输入字符串时的一天。意外转换是CLR不直接允许这些转换的原因。明确的,从不出乎意料的转换看起来像这样:

Dim dt As DateTime = DateTime.Parse(obj.ToString(), _
    System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormat)

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

答案 1 :(得分:16)

DirectCast对于值类型(整数等)的速度快两倍,但对于引用类型则相同。

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

答案 2 :(得分:1)

page解释得很好。

阅读它,我认为当你使用DirectCast时,你确信转换可以在没有缩小或扩展(在这种情况下是数字数据)的情况下工作。然而,CType将尝试转换为它,开发人员意识到缩小/扩展。

答案 3 :(得分:0)

“转换”意味着将一种数据类型转换为另一种数据类型(例如,字符串转换为 整数,十进制到整数,对象到字符串等。)

通过“强制转换”意味着将一种类型的对象更改为另一种类型 通过以下规则之一与之相关。

http://www.thedevheaven.com/2012/09/directcast-vs-ctype.html