自从我在2005年从VB6迁移到VB.NET以来,我一直在使用CType从一种数据类型到另一种数据类型。我这样做,因为它只是更快的类型,用于存在于VB6,我不知道为什么我必须使用DirectCast,如果它们之间显然没有区别。
我使用TryCast一段时间,因为我明白,有时铸造可能失败。然而我不能得到CType和DirectCast之间的区别。
任何人都可以告诉我在简单的英语中有什么区别两个区别(CType和DirectCast)?添加在哪里使用的例子将是有益的。
谢谢。
TryCast和DirectCast是直接映射到CLR支持的转换操作符。它们可以快速将基本类型的对象转换为派生类型或取消类型值类型的值。 DirectCast在不可能转换时抛出异常,TryCast如果失败则返回Nothing。你通常希望DirectCast捕获编程错误。
CType允许转换的超集,CLR皱眉的。我可以想到的最好的例子是将字符串转换为数字或日期。例如:
Dim obj As Object obj = "4/1/2010" Dim dt As DateTime = CType(obj,DateTime)
如果选项严格打开有效,您必须使用。如果它是关闭,那么你可以直接做:
Option Strict Off ... Dim dt As DateTime = obj
非常方便,当然和VB.NET的一部分作为一种动态类型语言。但不是没有问题,那个日期是独角兽日在stackoverflow.com但将是一天在一月英国人进入字符串。意外的转换是CLR不允许这些直接的原因。显式,从来没有惊喜的转换看起来像这样:
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。