所有这些都是平等的吗?我应该在什么情况下选择其他人?
var.ToString()
CStr的(VAR)
CType(var,String)
DirectCast(var,String)
编辑:来自NotMyself的建议......
TryCast(var,String)
bdukes.. 151
这些都略有不同,通常具有可接受的用途.
var.
ToString
()
将为您提供对象的字符串表示形式,无论它是什么类型.如果var
不是字符串,请使用此选项.
CStr
(var)
是VB字符串转换运算符.我不是一个VB人,所以我建议避免它,但它不会真的伤害任何东西.我认为它基本上是一样的CType
.
CType
(var, String)
将使用任何提供的转换运算符将给定类型转换为字符串.
DirectCast
(var, String)
用于将对象上传到字符串中.如果您知道对象变量实际上是一个字符串,请使用它.这与(string)var
C#中的相同.
TryCast
(正如@ NotMyself所提到的)就像DirectCast
,但Nothing
如果变量无法转换为字符串,它将返回,而不是抛出异常.这与var as string
C#中的相同.TryCast
MSDN上的页面也有很好的比较.
TryCast适用于所有*但*值类型. (18认同)
从来没有理由使用CType(var,String)而不是CStr(var),它们完全相同. (15认同)
如果var是DBNull.Value,`CStr(var)`会阻塞并引发异常,但备用`Convert.ToString(var)`将返回一个空字符串. (3认同)
@Maslow`TryCast`仅适用于值类型,因为它需要是一个可以将'Nothing`作为值的类型 (2认同)
小智.. 11
Cstr()
内联编译以获得更好的性能.
CType
如果定义了转换运算符,则允许在类型之间进行转换
ToString()
如果无法进行转换,则在基类型和字符串之间会抛出异常.
TryParse()
从String到base typeif
否则返回false
DirectCast
如果类型通过继承相关或共享一个公共接口使用,如果无法进行强制转换会抛出异常,trycast
在这个实例中不会返回任何内容
这些都略有不同,通常具有可接受的用途.
var.
ToString
()
将为您提供对象的字符串表示形式,无论它是什么类型.如果var
不是字符串,请使用此选项.
CStr
(var)
是VB字符串转换运算符.我不是一个VB人,所以我建议避免它,但它不会真的伤害任何东西.我认为它基本上是一样的CType
.
CType
(var, String)
将使用任何提供的转换运算符将给定类型转换为字符串.
DirectCast
(var, String)
用于将对象上传到字符串中.如果您知道对象变量实际上是一个字符串,请使用它.这与(string)var
C#中的相同.
TryCast
(正如@ NotMyself所提到的)就像DirectCast
,但Nothing
如果变量无法转换为字符串,它将返回,而不是抛出异常.这与var as string
C#中的相同.TryCast
MSDN上的页面也有很好的比较.
Cstr()
内联编译以获得更好的性能.
CType
如果定义了转换运算符,则允许在类型之间进行转换
ToString()
如果无法进行转换,则在基类型和字符串之间会抛出异常.
TryParse()
从String到base 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,你会相应地处理它.
MSDN似乎表明,针对特定类型的Cxxx强制转换可以提高VB .NET的性能,因为它们被转换为内联代码.出于某种原因,它还建议DirectCast而不是CType在某些情况下(文档说明它是在存在继承关系的时候;我相信这意味着在编译时检查强制转换并且可以应用优化,而CType总是使用VB运行时.)
当我编写VB .NET代码时,我使用的内容取决于我正在做什么.如果它是原型代码我将丢弃,我会使用我碰巧输入的任何内容.如果是我认真的代码,我会尝试使用Cxxx演员.如果一个不存在,我会使用DirectCast,如果我有一个合理的信念,即存在继承关系.如果这是我不知道演员表是否应该成功的情况(例如用户输入 - >整数),那么我使用TryCast来做一些比在用户处抛出异常更友好的事情.
我无法理解的一件事是我倾向于使用ToString而不是CStr,但据说Cstr更快.