题
所有这些都相等吗?在什么情况下我应该选择其中一个而不是其他?
var.ToString()
CStr(变量)
CType(变量,字符串)
DirectCast(变量,字符串)
编辑:建议来自 不是我自己…
- TryCast(var, 字符串)
解决方案
这些都略有不同,并且通常具有可接受的用法。
var.
ToString
()
将为您提供对象的字符串表示形式,无论它是什么类型。使用这个如果var
还不是字符串。CStr
(var)
是 VB 字符串转换运算符。我不是 VB 人员,所以我建议避免它,但这并不会真正伤害任何东西。我认为它基本上是一样的CType
.CType
(var, String)
将使用任何提供的转换运算符将给定类型转换为字符串。DirectCast
(var, String)
用于将对象向上转换为字符串。如果您知道对象变量实际上是字符串,请使用它。这与(string)var
在 C# 中。TryCast
(正如@提到的不是我自己) 就好像DirectCast
, ,但它会返回Nothing
如果变量无法转换为字符串,而不是抛出异常。这与var as string
在 C# 中。这TryCast
MSDN 页面上也有很好的比较。
其他提示
Cstr()
内联编译以获得更好的性能。
CType
如果定义了转换运算符,则允许类型之间的转换
ToString()
如果无法进行转换,则在基本类型和字符串之间会引发异常。
TryParse()
从字符串到基数 typeif
可能,否则返回 false
DirectCast
如果类型通过继承相关或共享公共接口,则使用,如果无法进行强制转换,将抛出异常, trycast
在这种情况下不会返回任何内容
我更喜欢以下语法:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
哈哈,你可以看出我通常用 C# 编写代码。8)
我更喜欢 TryCast 的原因是您不必担心转换异常的开销。您的转换要么成功,要么您的变量被初始化为 null,并且您相应地进行处理。
微软软件定义网络 似乎表明特定类型的 Cxxx 强制转换可以提高 VB .NET 中的性能,因为它们被转换为内联代码。出于某种原因,它还建议 直播 在某些情况下与 CType 相反(文档指出当存在继承关系时;我相信这意味着在编译时会检查转换的合理性,并且可以应用优化,而 CType 始终使用 VB 运行时。)
当我编写 VB .NET 代码时,我使用什么取决于我正在做什么。如果它是我要扔掉的原型代码,我会使用我碰巧输入的任何内容。如果这是我认真对待的代码,我会尝试使用 Cxxx 强制转换。如果不存在,如果我有理由相信存在继承关系,我会使用 DirectCast。如果我不知道转换是否应该成功(例如,用户输入 -> 整数),那么我使用 TryCast 来做一些比向用户抛出异常更友好的事情。
我无法动摇的一件事是我倾向于使用 ToString 而不是 CStr,但据说 Cstr 更快。
根据认证考试,您应该尽可能使用 Convert.ToXXX() 进行简单转换,因为它比 CXXX 转换更好地优化性能。
有一次,我记得看到 MSDN 库声明使用 CStr(),因为它更快。我不知道这是否属实。