使用DirectCast,CType和TryCast投射数据types

自从我从2005年的某个地方从VB6移到VB.NET以来,我一直在使用CType从一种数据types转换到另一种数据types。 我这样做是因为它只是键入的速度更快,曾经存在于VB6,我不知道为什么我必须使用DirectCast,如果它们之间显然没有区别。

我偶尔会使用TryCast,因为我知道有时候Cast会失败。 然而,我不能区分CType和DirectCast。

任何人都可以告诉我简单的英文有什么区别两者(CType和DirectCast)的区别? 增加使用什么地方的例子也是有帮助的。

谢谢。

TryCast和DirectCast是转换操作符,直接映射到CLR的转换支持。 他们可以快速地将一个基本types的对象转换为派生types,或者取消一个值types的值。 如果转换不可行,则DirectCast将引发exception,如果失败,则TryCast将返回Nothing。 您通常希望支持DirectCast来捕捉编程错误。

CType允许转换的超集,CLR不喜欢的转换。 我能想到的最好的例子是将string转换为数字或date。 例如:

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

如果Option Strict On有效,您将不得不使用哪一个。 如果它closures,那么你可以直接做:

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

当然非常方便,也是VB.NET作为dynamictypes语言的一部分。 但不是没有问题,那个date是独angular兽一天在stackoverflow.com,但将是一个英国人进入string1月的一天。 意外的转换是CLR不允许这些直接的原因。 明确的,从来没有一个惊喜转换看起来像这样:

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

无论你是购买Try / DirectCast还是CType还是显式转换都是个人select。 如果你现在使用Option Strict On进行编程,那么你应该开始使用Try / DirectCast。 如果你喜欢VB.NET语言,因为你喜欢dynamictypes的方便,那么不要犹豫,继续在CType。

DirectCast的值types(整数…等)的速度是两倍,但参考types相同。

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

这个页面解释得很好。

读它,我认为,当你使用DirectCast ,你确定转换将不会缩小或扩展(在这种情况下,数字数据)。 而CType会尝试转换,开发者意识到缩小/扩展。

“转换”是指将一个数据types转换为另一个数据types(例如,string为整数,小数为整数,对象为string等)。

“铸造”是指通过以下规则之一将一种types的对象改变为与其相关的另一种types。

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