这些是否都相等?在什么情况下我应该选择其中的每一个?
var.ToString()
CStr(var)
CType(var, String)
DirectCast(var, String)
编辑:来自NotMyself的建议...
- TryCast(var, String)(尝试将变量转换为字符串)
这些都略有不同,通常具有可接受的用途。
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()
将字符串转换为基本类型,如果不可能则返回 false。
DirectCast
用于继承或共享公共接口的相关类型,如果转换不可能,则会抛出异常;在这种情况下,trycast
不会返回任何内容。
MSDN似乎表明,VB .NET中特定类型的Cxxx转换可以提高性能,因为它们被转换成内嵌代码。出于某些原因,它还建议在某些情况下使用DirectCast而不是CType(文档指出这是在存在继承关系时;我认为这意味着转换的合理性在编译时进行检查,并且可以应用优化,而CType始终使用VB运行时)。
当我编写VB .NET代码时,我所使用的取决于我正在做什么。如果是我要丢弃的原型代码,我会使用任何我打出来的东西。如果是我认真对待的代码,我会尽量使用Cxxx转换。如果没有Cxxx转换,则如果我有合理的信念存在继承关系,我将使用DirectCast。如果情况是我不知道转换是否成功(例如用户输入->整数),那么我将使用TryCast以执行比向用户抛出异常更友好的操作。
有一件事我无法摆脱的是,我倾向于使用ToString而不是CStr,但据说Cstr更快。
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
哈哈,你可以看出我通常用C#编写代码。8)
我喜欢使用TryCast的原因是你不需要处理转换异常的开销。你的转换要么成功,要么你的变量被初始化为null,然后你相应地处理它。
.ToString()
方法。值类型(例如 Integer)不能为 Nothing。因此,在这种情况下,CStr(number) 或 number.ToString() 都是安全的。在一般情况下(不仅限于值类型),CStr(whatever) 是安全的,因为它可以处理 Nothing -- 结果将为 Nothing,在字符串变量中。TryCast 很有用 -- 只是在这里不适用。 - ToolmakerSteve用户Konrad Rudolph在Stack Overflow问题“VB.NET的隐藏功能”中倡导使用DirectCast()。
String
,所以 OP 讨论 DirectCast 适用的情况的可能性不大。 - ToolmakerSteve曾经有一次,我记得在MSDN库中看到使用CStr()函数是因为它更快。但我不确定这是否正确。
TryCast
只适用于值类型,因为它需要是一个可以将Nothing
作为值的类型。 - bdukesDim myList AS ArrayList=new ArrayList
当你写(From e In myList select CType(e.Name,String)).ToArray()
时它不起作用。我改为写... select CType(e.Name.ToString,String)).ToArray()
,然后我找回了我的微笑。 - Bellash