所有这些都是平等的吗? 在什么情况下,我应该选择每一个而不是其他的?
ToString ()
(var)
CType (var,String)
DirectCast (var,String)
编辑: 来自 译自: 美国《科学》杂志网站(https://stackoverflow. com/users/303/NotMyself)的建议和帮助;
我更喜欢下面的句法:
Dim number As Integer = 1 Dim str As String = String.TryCast(number) If str IsNot Nothing Then
哈,你可以看出来我通常用 C # 编写代码
我之所以选择 TryCast,是因为您不必纠结于强制转换异常的开销。您的强制转换要么成功,要么将变量初始化为 null,并相应地进行处理。
这些都略有不同,通常有一个可接受的用法。
var.
ToString
()
var
CStr
CType
(var, String)
DirectCast
(string)var
TryCast
Nothing
var as string
MSDN 似乎表明,针对特定类型的 Cxxx 强制转换可以提高 VB 中的性能。NET,因为它们被转换为内联代码。出于某些原因,它还建议在某些情况下使用 直播而不是 CType (文档中说明它是在存在继承关系的情况下使用的; 我相信这意味着在编译时检查强制转换是否正常,可以应用优化,而 CType 总是使用 VB 运行时)
当我写 VB 的时候。NET 代码,我使用什么取决于我在做什么。如果这是我要丢弃的原型代码,我会使用任何我碰巧要输入的东西。如果这是我认真对待的代码,我会尝试使用 Cxxx 强制转换。如果不存在继承关系,我会使用 DirectCast,如果我有理由相信存在继承关系的话。如果我不知道强制转换是否会成功(例如,用户输入-> 整数) ,那么我使用 TryCast 来做一些比向用户抛出异常更友好的事情。
有一点我无法改变,那就是我倾向于使用 ToString 而不是 CStr,但据说 CStr 更快。
我记得有一次看到 MSDN 库状态使用 CStr () ,因为它更快。我不知道这是不是真的。
用户 康拉德 · 鲁道夫提倡 对于堆栈溢出问题“ VB.NET 的隐藏特性”中的 DirectCast ()。
为了获得更好的性能,Cstr()是内联编译的。
Cstr()
如果定义了转换运算符,则 CType允许在类型之间进行强制转换
如果无法转换,则在基类型和字符串之间引发异常。
从字符串到基 typeif可能返回 false,否则返回 false
typeif
如果类型通过继承或共享一个公共接口相关,则使用 DirectCast,如果不可能进行强制转换,则抛出异常,在此实例中 trycast将不返回任何内容
trycast
根据认证考试,对于简单转换,您应该尽可能使用 Convert.ToXXX () ,因为它比 CXXX 转换更好地优化性能。