提问人:Zack Peterson 提问时间:9/3/2008 最后编辑:CommunityZack Peterson 更新时间:1/7/2023 访问量:188764
我应该如何投 VB.NET?
How should I cast in VB.NET?
问:
这些都是平等的吗?在什么情况下我应该选择每一个?
变量。ToString()
CStr(变量)
CType(var, 字符串)
DirectCast(var, 字符串)
编辑:来自NotMyself的建议...
- TryCast(var, 字符串)
答:
我更喜欢以下语法:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
呵呵,你可以看出我通常用 C# 编写代码。8)
我更喜欢 TryCast 的原因是您不必弄乱强制转换异常的开销。您的强制转换要么成功,要么您的变量初始化为 null,然后您相应地处理它。
评论
.ToString()
它们都略有不同,并且通常具有可接受的用法。
var.
ToString
将为您提供对象的字符串表示形式,无论它是什么类型。如果还不是字符串,请使用此选项。()
var
CStr
是 VB 字符串强制转换运算符。我不是VB人,所以我建议避免它,但这不会真正伤害任何东西。我认为它基本上和.(var)
CType
CType
将使用任何提供的转换运算符将给定类型转换为字符串。(var, String)
DirectCast
用于将对象向上投射到字符串中。如果您知道对象变量实际上是一个字符串,请使用它。这与 C# 中的相同。(var, String)
(string)var
TryCast
(如@NotMyself所述)类似于 ,但如果变量无法转换为字符串,它将返回,而不是抛出异常。这与 C# 中的相同。MSDN上的页面也有一个很好的比较。DirectCast
Nothing
var as string
TryCast
评论
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 更快。
有一次,我记得看到 MSDN 库状态使用 CStr(),因为它更快。我不知道这是否属实。
评论
用户 Konrad Rudolph 在 Stack Overflow 问题“VB.NET 的隐藏功能”中倡导 DirectCast()。
评论
String
String
ToString
Cstr()
以内联方式编译以获得更好的性能。
CType
如果定义了转换运算符,则允许在类型之间进行强制转换
ToString()
如果无法进行转换,则在基类型和字符串之间引发异常。
TryParse()
从 String 到 base possible 否则返回 falsetypeif
DirectCast
如果类型通过继承相关或共享公共接口,则使用,如果无法强制转换,则将抛出异常,在这种情况下将不返回任何内容trycast
根据认证考试,您应该尽可能使用 Convert.ToXXX() 进行简单转换,因为它比 CXXX 转换更能优化性能。
评论
上一个:C# 数值常量
下一个:C++ 强制转换语法样式
评论