使用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