我应该如何投射在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(),因为它更快。 我不知道这是否是真的。