所有这些都是平等的吗?在什么情况下我应该选择其中的一个而不是其他的?
piv4azn71#
它们都略有不同,通常都有可接受的用法。
var.
ToString
()
var
CStr
(var)
CType
(var, String)
DirectCast
(string)var
TryCast
Nothing
var as string
w1jd8yoj2#
Cstr()被内联编译以获得更好的性能。如果定义了转换运算符,则CType允许类型之间的强制转换ToString()如果无法转换,则Between base type and string将引发异常。TryParse()从字符串到基typeif可能,否则返回falseDirectCast在类型通过继承相关或共享公共接口时使用,如果无法强制转换,则将引发异常,trycast在此示例中将不返回任何内容
Cstr()
ToString()
TryParse()
typeif
trycast
a14dhokn3#
我更喜欢下面的语法:
Dim number As Integer = 1 Dim str As String = String.TryCast(number) If str IsNot Nothing Then
哈,你可以看出我通常用C#写代码。8)我更喜欢TryCast的原因是你不需要处理异常类型转换的开销。你的类型转换要么成功,要么变量初始化为null,你就可以相应地处理它。
rkue9o1l4#
MSDN似乎表明特定类型的Cxxx强制转换可以提高VB .NET中的性能,因为它们被转换为内联代码。出于某种原因,它还建议在某些情况下使用DirectCast而不是CType(文档说明了当存在继承关系时;我相信这意味着在编译时检查强制转换的健全性,并且可以应用优化,而CType总是使用VB运行时。)当我写VB .NET代码时,我使用什么取决于我在做什么。如果它是原型代码,我将扔掉,我使用我碰巧键入的任何东西。如果它是我认真对待的代码,我尝试使用Cxxx类型转换。如果不存在,如果我有合理的理由相信存在继承关系,我会使用DirectCast。如果它'在这种情况下,我不知道强制转换是否应该成功(例如,用户输入-〉整数),那么我使用Trycast来做一些比向用户抛出异常更友好的事情。有一件事我不能动摇的是,我倾向于使用ToString而不是CStr,但据说Cstr更快。
n53p2ov05#
用户Konrad Rudolph主张在堆栈溢出问题“VB.NET的隐藏功能”中使用DirectCast()。
chhkpiq46#
根据认证考试,您应该尽可能使用Convert.ToXXX()进行简单的转换,因为它比CXXX转换更能优化性能。
ar5n3qh57#
有一次,我记得看到MSDN库声明使用CStr(),因为它更快,但我不知道这是不是真的。
7条答案
按热度按时间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
页面也有很好的比较。w1jd8yoj2#
Cstr()
被内联编译以获得更好的性能。如果定义了转换运算符,则
CType
允许类型之间的强制转换ToString()
如果无法转换,则Between base type and string将引发异常。TryParse()
从字符串到基typeif
可能,否则返回falseDirectCast
在类型通过继承相关或共享公共接口时使用,如果无法强制转换,则将引发异常,trycast
在此示例中将不返回任何内容a14dhokn3#
我更喜欢下面的语法:
哈,你可以看出我通常用C#写代码。8)
我更喜欢TryCast的原因是你不需要处理异常类型转换的开销。你的类型转换要么成功,要么变量初始化为null,你就可以相应地处理它。
rkue9o1l4#
MSDN似乎表明特定类型的Cxxx强制转换可以提高VB .NET中的性能,因为它们被转换为内联代码。出于某种原因,它还建议在某些情况下使用DirectCast而不是CType(文档说明了当存在继承关系时;我相信这意味着在编译时检查强制转换的健全性,并且可以应用优化,而CType总是使用VB运行时。)
当我写VB .NET代码时,我使用什么取决于我在做什么。如果它是原型代码,我将扔掉,我使用我碰巧键入的任何东西。如果它是我认真对待的代码,我尝试使用Cxxx类型转换。如果不存在,如果我有合理的理由相信存在继承关系,我会使用DirectCast。如果它'在这种情况下,我不知道强制转换是否应该成功(例如,用户输入-〉整数),那么我使用Trycast来做一些比向用户抛出异常更友好的事情。
有一件事我不能动摇的是,我倾向于使用ToString而不是CStr,但据说Cstr更快。
n53p2ov05#
用户Konrad Rudolph主张在堆栈溢出问题“VB.NET的隐藏功能”中使用DirectCast()。
chhkpiq46#
根据认证考试,您应该尽可能使用Convert.ToXXX()进行简单的转换,因为它比CXXX转换更能优化性能。
ar5n3qh57#
有一次,我记得看到MSDN库声明使用CStr(),因为它更快,但我不知道这是不是真的。