157

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

  • var.ToString()

  • CStr(var)

  • CType(变量,字符串)

  • DirectCast(变量,字符串)


编辑:来自NotMyself的建议……

  • TryCast(变量,字符串)
4

7 回答 7

165

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

  • 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页面也有一个很好的比较。
于 2008-09-02T22:03:59.413 回答
13

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

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

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

TryParse()从 String 到 basetypeif可能,否则返回 false

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

于 2008-11-25T20:02:41.577 回答
8

我更喜欢以下语法:

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

If str IsNot Nothing Then

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

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

于 2008-09-02T21:54:36.597 回答
8

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

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

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

于 2008-09-02T22:12:07.600 回答
4

用户Konrad Rudolph在 Stack Overflow 问题“VB.NET 的隐藏特性”中提倡DirectCast() 。

于 2008-09-19T16:28:44.290 回答
1

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

于 2011-03-16T18:44:19.130 回答
0

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

于 2008-09-05T19:03:09.197 回答