关于.net:我应该如何使用VB.NET?

How should I cast in VB.NET?

所有这些都是平等的吗?在什么情况下我应该选择彼此而不是其他人?

  • 变量ToString()

  • CSTR(变量)

  • ctype(var,字符串)

  • DirectCast(var,字符串)

编辑:来自notself&hellip的建议;

  • Trycast(var,字符串)

这些都略有不同,并且通常具有可接受的用法。

  • 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()从字符串到基typeif可能,否则返回false

如果类型通过继承关系或共享一个公共接口,则使用DirectCast,如果不可能进行强制转换,则抛出异常,在这种情况下,TryCast将不返回任何内容。


我喜欢以下语法:

1
2
3
4
Dim number As Integer = 1
Dim str As String = String.TryCast(number)

If str IsNot Nothing Then

哈,你知道我通常用C语言写代码。8)

我更喜欢Trycast的原因是您不必处理强制转换异常的开销。强制转换成功或变量初始化为空,并相应地进行处理。


msdn似乎表明特定类型的cxx强制转换可以提高vb.net的性能,因为它们被转换为内联代码。出于某种原因,它还建议在某些情况下使用DirectCast,而不是Ctype(文档说明存在继承关系时使用DirectCast;我相信这意味着在编译时检查强制转换的健全性,并且可以应用优化,而Ctype始终使用VB运行时。)

当我编写vb.net代码时,我使用的内容取决于我在做什么。如果这是我要丢弃的原型代码,我将使用我所键入的任何代码。如果这是我认真考虑的代码,我会尝试使用cxx强制转换。如果一个不存在,如果我有一个合理的信念,有继承关系,我使用DirectCast。如果在这种情况下,我不知道强制转换是否应该成功(例如,用户输入->整数),那么我使用Trycast来做一些比向用户抛出异常更友好的事情。

有一件事我不能动摇,我倾向于用ToString代替CSTR,但据说CSTR更快。


用户KonradRudolph在堆栈溢出问题"vb.net的隐藏特性"中主张directcast()。


根据认证检查,您应该尽可能使用convert.toxx()进行简单的转换,因为它比cxx转换优化性能。


有一次,我记得看到msdn库状态使用cstr(),因为它更快。但我不知道这是不是真的。