【发布时间】:2010-09-07 15:11:44
【问题描述】:
所有这些都是平等的吗?在什么情况下我应该选择每个而不是其他?
var.ToString()
CStr(var)
CType(var, String)
DirectCast(var, String)
编辑:来自NotMyself的建议……
- TryCast(var, String)
【问题讨论】:
所有这些都是平等的吗?在什么情况下我应该选择每个而不是其他?
var.ToString()
CStr(var)
CType(var, String)
DirectCast(var, String)
编辑:来自NotMyself的建议……
【问题讨论】:
这些都略有不同,并且通常具有可接受的用法。
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 页面也有很好的对比。【讨论】:
TryCast 仅适用于值类型,因为它必须是可以将 Nothing 作为值的类型
CStr(var) 将阻塞并引发异常,但备用 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(),我找回了我的笑容。
Cstr() 被内联编译以获得更好的性能。
CType 如果定义了转换运算符,则允许在类型之间进行强制转换
ToString()在基类型和字符串之间如果不能转换会抛出异常。
TryParse() 从 String 到 base typeif 可能,否则返回 false
DirectCast 如果类型通过继承相关或共享一个公共接口,则使用,如果无法进行强制转换,将抛出异常,trycast 在此实例中将不返回任何内容
【讨论】:
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——结果将是 Nothing,在 String 变量中。 TryCast 非常有用——只是不在这里。
【讨论】:
String,因此 OP 不太可能在讨论适合 DirectCast 的情况。
String 和ToString,我的投诉将不适用。在您将主题范围从一般 CONVERSION 缩小之前,您不应该提倡 DirectCast。
根据认证考试,您应该尽可能使用 Convert.ToXXX() 进行简单转换,因为它比 CXXX 转换更能优化性能。
【讨论】:
有一次,我记得看到 MSDN 库状态使用 CStr(),因为它更快。我不知道这是不是真的。
【讨论】: