我应该如何使用VB.NET?

时间:2008-09-02 21:49:33

标签: .net vb.net casting

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

  • var.ToString()

  • CStr的(VAR)

  • CType(var,String)

  • DirectCast(var,String)


编辑:来自 NotMyself 的建议......

  • TryCast(var,String)

7 个答案:

答案 0 :(得分:147)

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

  • 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页面也有很好的比较。

答案 1 :(得分:10)

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

如果定义了转换运算符,

CType允许在类型之间进行强制转换

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

TryParse()从String到base typeif否则返回false

如果类型通过继承相关或共享一个公共接口,则使用

DirectCast,如果无法进行强制转换将抛出异常,trycast在此实例中不返回任何内容

答案 2 :(得分:8)

我更喜欢以下语法:

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

If str IsNot Nothing Then

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

我更喜欢TryCast的原因是你不必乱用于抛出异常的开销。你的演员要么成功,要么你的变量被初始化为null,你会相应地处理它。

答案 3 :(得分:7)

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

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

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

答案 4 :(得分:4)

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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