在VB.NET中应该如何强制转换?

gjmwrych  于 2023-01-10  发布在  .NET
关注(0)|答案(7)|浏览(511)

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

  • 变量到字符串()
  • CStr(变量)
  • CType(变量,字符串)
  • DirectCast(变量、字符串)
  • 编辑:来自**NotMyself*的建议...
  • TryCast(变量、字符串)
piv4azn7

piv4azn71#

它们都略有不同,通常都有可接受的用法。

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

w1jd8yoj2#

Cstr()被内联编译以获得更好的性能。
如果定义了转换运算符,则CType允许类型之间的强制转换
ToString()如果无法转换,则Between base type and string将引发异常。
TryParse()从字符串到基typeif可能,否则返回false
DirectCast在类型通过继承相关或共享公共接口时使用,如果无法强制转换,则将引发异常,trycast在此示例中将不返回任何内容

a14dhokn

a14dhokn3#

我更喜欢下面的语法:

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

If str IsNot Nothing Then

哈,你可以看出我通常用C#写代码。8)
我更喜欢TryCast的原因是你不需要处理异常类型转换的开销。你的类型转换要么成功,要么变量初始化为null,你就可以相应地处理它。

rkue9o1l

rkue9o1l4#

MSDN似乎表明特定类型的Cxxx强制转换可以提高VB .NET中的性能,因为它们被转换为内联代码。出于某种原因,它还建议在某些情况下使用DirectCast而不是CType(文档说明了当存在继承关系时;我相信这意味着在编译时检查强制转换的健全性,并且可以应用优化,而CType总是使用VB运行时。)
当我写VB .NET代码时,我使用什么取决于我在做什么。如果它是原型代码,我将扔掉,我使用我碰巧键入的任何东西。如果它是我认真对待的代码,我尝试使用Cxxx类型转换。如果不存在,如果我有合理的理由相信存在继承关系,我会使用DirectCast。如果它'在这种情况下,我不知道强制转换是否应该成功(例如,用户输入-〉整数),那么我使用Trycast来做一些比向用户抛出异常更友好的事情。
有一件事我不能动摇的是,我倾向于使用ToString而不是CStr,但据说Cstr更快。

n53p2ov0

n53p2ov05#

用户Konrad Rudolph主张在堆栈溢出问题“VB.NET的隐藏功能”中使用DirectCast()。

chhkpiq4

chhkpiq46#

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

ar5n3qh5

ar5n3qh57#

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

相关问题