我应该如何投射在VB.NET?
这些都是平等的吗? 我应该在什么情况下select他人?
-
var.ToString()
-
CStr的(VAR)
-
CType(var,String)
-
DirectCast(var,String)
编辑:从NotMyselfbuild议…
- TryCast(var,String)
这些都略有不同,通常有一个可以接受的用法。
var.
ToString
()
会给你一个对象的string表示,不pipe它是什么types。 如果var
不是string,请使用它。-
CStr
(var)
是VBstring转换运算符。 我不是一个VB的人,所以我build议避免它,但它不会真的伤害任何东西。 我觉得它和CType
基本一样。 -
CType
(var, String)
将使用任何提供的转换运算符将给定types转换为string。 -
DirectCast
(var, String)
用于将对象上传到string中。 如果你知道一个对象variables实际上是一个string,就用这个。 这与C#中的(string)var
相同。 -
TryCast
(如@NotMyself所提到的)就像DirectCast
一样,但是如果variables不能被转换成string而不是抛出exception,它将返回Nothing
。 这与C#中的var as string
相同。 MSDN上的TryCast
页面也有很好的比较。
Cstr()
被内联编译以获得更好的性能。
如果定义了转换运算符,则CType
允许在types之间进行转换
ToString()
如果转换不可行,基types和string之间会引发exception。
TryParse()
从string到基本typeif
可能,否则返回false
如果types通过inheritance关联或共享一个公共接口,则使用DirectCast
,如果转换不可能,则抛出exception,在这种情况下, trycast
将不返回任何内容
我更喜欢以下语法:
Dim number As Integer = 1 Dim str As String = String.TryCast(number) If str IsNot Nothing Then
哈哈,你可以告诉我通常用C#编写代码。 8)
我更喜欢TryCast的原因是你不必担心铸造exception的开销。 你的演员要么成功,要么你的variables被初始化为空,并且相应地处理。
MSDN似乎表明Cxxx转换为特定types可以提高VB.NET的性能,因为它们被转换为内联代码。 出于某种原因,它也build议在某些情况下DirectCast而不是CType(文档说明它是什么时候存在inheritance关系;我相信这意味着在编译时检查转换的合理性,优化可以应用,而CType总是使用VB运行时。)
当我写VB .NET代码时,我使用什么取决于我在做什么。 如果它是原型代码,我将扔掉,我使用任何我碰巧打字。 如果是我认真的代码,我尝试使用Cxxxtypes。 如果不存在,如果我有合理的理由相信有inheritance关系,则使用DirectCast。 如果这种情况下,我不知道如果演员成功(例如,用户input – >整数),那么我使用TryCast来做一些比扔用户exception更友好的东西。
我不能动摇的一件事是我倾向于使用ToString而不是CStr,但据说Cstr更快。
用户Konrad Rudolph 在堆栈溢出问题“VB.NET的隐藏特性”中主张DirectCast() 。
根据authentication考试,您应尽可能使用Convert.ToXXX()进行简单转换,因为它比CXXX转换优化了性能。
有一次,我记得看到MSDN库状态使用CStr(),因为它更快。 我不知道这是否是真的。