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.
归档时间: |
|
查看次数: |
37646 次 |
最近记录: |