Answers:
这些都略有不同,并且通常具有可接受的用法。
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
仅适用于值类型,因为它必须是可以Nothing
作为值的类型
CStr(var)
如果var为DBNull.Value,将阻塞并引发异常,但替代项Convert.ToString(var)
将返回空字符串。
Dim myList AS ArrayList=new ArrayList
当您写(From e In myList select CType(e.Name,String)).ToArray()
它不起作用。我来写书... select CType(e.Name.ToString,String)).ToArray()
,得到了微笑。
MSDN似乎表明,针对特定类型的Cxxx强制转换可以提高VB .NET的性能,因为它们已转换为嵌入式代码。由于某种原因,它还建议在某些情况下使用DirectCast而不是CType(文档指出存在继承关系;我认为这意味着在编译时检查了强制转换的完整性,可以应用优化,而CType始终使用VB运行时。)
当我编写VB .NET代码时,我所使用的取决于我在做什么。如果我要扔掉的是原型代码,请使用碰巧输入的任何内容。如果我是认真的代码,我会尝试使用Cxxx类型转换。如果不存在,如果我有合理的理由相信存在继承关系,则可以使用DirectCast。如果在这种情况下我不知道强制转换是否成功(例如,用户输入->整数),那么我使用TryCast来做比向用户抛出异常更友好的操作。
我不能动摇的一件事是,我倾向于使用ToString而不是CStr,但据推测Cstr更快。
我更喜欢以下语法:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
可以告诉我,我通常使用C#编写代码。8)
我更喜欢TryCast的原因是您不必担心强制转换异常的开销。您的强制转换成功或变量被初始化为null,然后进行相应处理。
.ToString()
。值类型(例如Integer)不能为Nothing。因此,在这种情况下,CStr(number)或number.ToString()都是安全的。在一般情况下(不仅是值类型),CStr(whatever)是安全的,因为它可以处理Nothing,结果将是String变量中的Nothing。TryCast非常有用-只是不在这里。
String
,OP不太可能讨论DirectCast适用的情况。
String
和的问题ToString
,我的投诉将不适用。您不应该主张DirectCast,除非您从常规CONVERSION缩小了主题范围。
根据认证考试,您应尽可能使用Convert.ToXXX()进行简单转换,因为它比CXXX转换更好地优化了性能。