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