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

  • var.ToString()

  • CStr(变量)

  • CType(变量,字符串)

  • DirectCast(变量,字符串)


编辑:建议来自 不是我自己

  • TryCast(var, 字符串)
有帮助吗?

解决方案

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

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

其他提示

Cstr() 内联编译以获得更好的性能。

CType 如果定义了转换运算符,则允许类型之间的转换

ToString() 如果无法进行转换,则在基本类型和字符串之间会引发异常。

TryParse() 从字符串到基数 typeif 可能,否则返回 false

DirectCast 如果类型通过继承相关或共享公共接口,则使用,如果无法进行强制转换,将抛出异常, trycast 在这种情况下不会返回任何内容

我更喜欢以下语法:

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

If str IsNot Nothing Then

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

我更喜欢 TryCast 的原因是您不必担心转换异常的开销。您的转换要么成功,要么您的变量被初始化为 null,并且您相应地进行处理。

微软软件定义网络 似乎表明特定类型的 Cxxx 强制转换可以提高 VB .NET 中的性能,因为它们被转换为内联代码。出于某种原因,它还建议 直播 在某些情况下与 CType 相反(文档指出当存在继承关系时;我相信这意味着在编译时会检查转换的合理性,并且可以应用优化,而 CType 始终使用 VB 运行时。)

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

我无法动摇的一件事是我倾向于使用 ToString 而不是 CStr,但据说 Cstr 更快。

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

有一次,我记得看到 MSDN 库声明使用 CStr(),因为它更快。我不知道这是否属实。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top