所有这些都是平等的吗?我应该在什么情况下选择其他人?
var.ToString()
CStr的(VAR)
CType(var,String)
DirectCast(var,String)
编辑:来自 NotMyself 的建议......
答案 0 :(得分:147)
这些都略有不同,通常具有可接受的用途。
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
页面也有很好的比较。答案 1 :(得分:10)
Cstr()
内联编译以获得更好的性能。
CType
允许在类型之间进行强制转换
ToString()
如果无法进行转换,则在基类型和字符串之间会抛出异常。
TryParse()
从String到base typeif
否则返回false
DirectCast
,如果无法进行强制转换将抛出异常,trycast
在此实例中不返回任何内容
答案 2 :(得分:8)
我更喜欢以下语法:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
哈,你可以告诉我通常用C#编写代码。 8)
我更喜欢TryCast的原因是你不必乱用于抛出异常的开销。你的演员要么成功,要么你的变量被初始化为null,你会相应地处理它。
答案 3 :(得分:7)
MSDN似乎表明特定类型的Cxxx强制转换可以提高VB .NET的性能,因为它们被转换为内联代码。出于某种原因,在某些情况下,它还建议DirectCast而不是CType(文档说明它存在继承关系时;我相信这意味着在编译时检查强制转换的可靠性并且可以应用优化CType始终使用VB运行时。)
当我编写VB .NET代码时,我使用的内容取决于我正在做什么。如果它是原型代码我将丢弃,我会使用我碰巧输入的任何内容。如果是我认真的代码,我会尝试使用Cxxx演员。如果一个不存在,我会使用DirectCast,如果我有一个合理的信念,即存在继承关系。如果这是我不知道演员表是否应该成功的情况(例如用户输入 - >整数),那么我使用TryCast来做一些比在用户处抛出异常更友好的事情。
我无法理解的一件事是我倾向于使用ToString而不是CStr,但据说Cstr更快。
答案 4 :(得分:4)
答案 5 :(得分:1)
根据认证考试,您应尽可能使用Convert.ToXXX()进行简单转换,因为它优于CXXX转换优化性能。
答案 6 :(得分:0)
有一次,我记得看到MSDN库状态使用CStr(),因为它更快。我不知道这是否属实。