我应该如何在 VB.NET 中进行转换?

所有这些都是平等的吗? 在什么情况下,我应该选择每一个而不是其他的?

  • ToString ()

  • (var)

  • CType (var,String)

  • DirectCast (var,String)


编辑: 来自 译自: 美国《科学》杂志网站(https://stackoverflow. com/users/303/NotMyself)的建议和帮助;

  • TryCast (var,String)
180175 次浏览

我更喜欢下面的句法:

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


If str IsNot Nothing Then

哈,你可以看出来我通常用 C # 编写代码

我之所以选择 TryCast,是因为您不必纠结于强制转换异常的开销。您的强制转换要么成功,要么将变量初始化为 null,并相应地进行处理。

这些都略有不同,通常有一个可接受的用法。

  • var.ToString()将为您提供对象的字符串表示形式,而不管它是什么类型。如果 var还不是字符串,请使用此选项。
  • CStr (var)是 VB 字符串强制转换运算符。我不是一个 VB 的家伙,所以我建议避免它,但它真的不会伤害任何东西。我认为它基本上和 CType是一样的。
  • CType (var, String)将使用任何提供的转换运算符将给定类型转换为字符串。
  • DirectCast (var, String)用于将对象向上强制转换为字符串。如果您知道对象变量实际上是一个字符串,请使用。这与 C # 中的 (string)var相同。
  • TryCast (如@不是我自己所提到的)类似于 DirectCast,但是如果变量不能转换成字符串,它将返回 Nothing,而不是抛出异常。这与 C # 中的 var as string相同。MSDN 上的 TryCast页面也有很好的比较。

MSDN 似乎表明,针对特定类型的 Cxxx 强制转换可以提高 VB 中的性能。NET,因为它们被转换为内联代码。出于某些原因,它还建议在某些情况下使用 直播而不是 CType (文档中说明它是在存在继承关系的情况下使用的; 我相信这意味着在编译时检查强制转换是否正常,可以应用优化,而 CType 总是使用 VB 运行时)

当我写 VB 的时候。NET 代码,我使用什么取决于我在做什么。如果这是我要丢弃的原型代码,我会使用任何我碰巧要输入的东西。如果这是我认真对待的代码,我会尝试使用 Cxxx 强制转换。如果不存在继承关系,我会使用 DirectCast,如果我有理由相信存在继承关系的话。如果我不知道强制转换是否会成功(例如,用户输入-> 整数) ,那么我使用 TryCast 来做一些比向用户抛出异常更友好的事情。

有一点我无法改变,那就是我倾向于使用 ToString 而不是 CStr,但据说 CStr 更快。

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

为了获得更好的性能,Cstr()是内联编译的。

如果定义了转换运算符,则 CType允许在类型之间进行强制转换

如果无法转换,则在基类型和字符串之间引发异常。

从字符串到基 typeif可能返回 false,否则返回 false

如果类型通过继承或共享一个公共接口相关,则使用 DirectCast,如果不可能进行强制转换,则抛出异常,在此实例中 trycast将不返回任何内容

根据认证考试,对于简单转换,您应该尽可能使用 Convert.ToXXX () ,因为它比 CXXX 转换更好地优化性能。