VB CStr、CDate、CBool​​ 等与 DirectCast 的比较,无需转换即可进行投射

Posted

技术标签:

【中文标题】VB CStr、CDate、CBool​​ 等与 DirectCast 的比较,无需转换即可进行投射【英文标题】:VB CStr, CDate, CBool, etc. vs. DirectCast for casting without conversion 【发布时间】:2010-11-25 15:47:27 【问题描述】:

除非我需要进行实际的转换,否则我通常会避免使用 VB 的内置转换函数(CStr、CDate、CBool​​、CInt 等)。如果我只是强制转换,比如说从一个对象到一个字符串,我通常使用 DirectCast 或 TryCast,假设 CStr 等正在做一些我不需要的额外东西。但有时 DirectCast 语法有点麻烦,如下例所示。

Dim value1 As String
Dim value2 As String
Using cn As New SqlConnection(cnStr)
    Using cmd as New SqlCommmand(sqlStr, cn)
        Using reader = cmd.ExecuteReader()
            While reader.Read()
                value1 = DirectCast(reader("COLUMN1"), String)
                value2 = CStr(reader("COLUMN1"))
            End While
        End Using
    End Using
End Using

SqlDataReader.Item 返回一个 Object,需要将其转换为 String。 CStr 更易于阅读、键入和解释 (IMO)。

我的问题是,我使用哪一个重要吗?我是否应该只使用 CStr(以及 CDate 和 CBool​​ 等)而不用担心我假设这些函数正在做的额外工作?

使用这些功能还有其他缺点吗?

【问题讨论】:

【参考方案1】:

在您的示例中,您可以使用:

value1 = reader("COLUMN1").ToString()

它将列的内容作为字符串返回。

如果可以的话,我总是倾向于在对象上使用 ToString()。有时对象的 ToString() 方法会返回对象的类名之类的东西,而不是内容,因此 .ToString() 并不总是一个选项。

我认为不需要任何 VB 函数 CStr、CInt 等,因为 .NET 框架提供了很多不错的替代方案。例如。

Dim value As Integer = Convert.ToInt32(reader("Number").ToString())

是将字符串转换为 int 的好方法。这些转换方法值得一读,因为旧的 VB 风格函数只是为了向后兼容。

【讨论】:

感谢您的评论。我以字符串为例,但这个问题也适用于日期、布尔值、整数等。ToString 是一个很好的字符串建议。【参考方案2】:

大多数时候,我使用 CStr、CInt、CBool​​ 和 CType,因为它们更短且更易于阅读。可能会有轻微的性能成本,但大多数时候这并不重要。不过,很高兴了解 CType、TryCast、DirectCast 等之间的区别。

【讨论】:

【参考方案3】:

This is a good post 在 cmets 中讨论 DirectCast 与 CType 转换和变体。

简而言之,如果您想明确说明并知道会发生什么,建议使用 DirectCast。另一方面,Paul Vick(VB 技术主管)的评论说这并不重要,只需使用 CType 变体即可。

从该帖子中收集到一些有用的链接:

How should I cast in VB.NET? DirectCast Revealed(在 Paul Vick 的博客上发帖)

【讨论】:

Paul Vick 只说 DirectCast 的速度优势并不重要。但 DirectCast 的另一个优点是安全性(及早发现编程错误)。不加选择地使用 CStr 等是向Option Strict Off 倒退的一步。而你不希望那样。

以上是关于VB CStr、CDate、CBool​​ 等与 DirectCast 的比较,无需转换即可进行投射的主要内容,如果未能解决你的问题,请参考以下文章

VB6.0有那些英文字母要记的?例如函数之类的!

VB语句函数大全

VB语言教程

VB 的编程公式都有哪些

VB.NET 中 DirectCast() 和 CType() 的区别

求VB数据类型转换函数