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

时间:2009-09-04 14:14:44

标签: vb.net type-conversion

除非我需要进行实际转换,否则我通常会避免使用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​​等)而不担心我认为这些功能正在进行的额外工作吗?

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

3 个答案:

答案 0 :(得分:10)

This is a good post在关于DirectCast与CType演员和变体的评论中进行了讨论。

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

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

答案 1 :(得分:1)

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

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

它将以字符串形式返回列的内容。

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

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

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

是将字符串转换为int的好方法。值得阅读这些转换方法,因为旧的VB样式函数仅用于向后兼容。

答案 2 :(得分:0)

大多数时候,我使用CStr,CInt,CBool​​和CType,因为它更短,更容易阅读。可能会有轻微的性能成本,但大多数时候并不重要。很高兴知道CType,TryCast,DirectCast和其他人之间的差异。