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

Ale*_*fie 40 vb.net casting ctype directcast

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

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

谁能告诉我简单的简单英语有什么区别两者(CType和DirectCast)有什么区别?添加使用内容的示例也会有所帮助.

Han*_*ant 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)
Run Code Online (Sandbox Code Playgroud)

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

Option Strict Off
...
    Dim dt As DateTime = obj
Run Code Online (Sandbox Code Playgroud)

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

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

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


Ode*_*ded 16

DirectCast的值类型(整数等)快两倍,但引用类型相同.

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