代码之家  ›  专栏  ›  技术社区  ›  John M Gant aman_novice

vb cstr、cdate、cbool等与无转换的直接铸造

  •  4
  • John M Gant aman_novice  · 技术社区  · 15 年前

    我通常避免使用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返回一个需要转换为字符串的对象。CSTR易于阅读、打字和解释(IMO)。

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

    使用这些函数还有什么缺点吗?

    3 回复  |  直到 13 年前
        1
  •  10
  •   Community gkalpak    7 年前

    This is a good post 在关于DirectCast与Ctype类型转换和变体的评论中进行了讨论。

    简言之,如果您想明确地了解它并知道期望什么,建议使用DirectCast。另一方面,PaulVick(VB技术负责人)的一条评论说,这不重要,只需要使用CType变体。

    从那篇文章中收集到一些有用的链接:

        2
  •  1
  •   Tim Cooper    13 年前

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

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

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

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

    我不认为有必要使用任何VB函数cstr、cint等,因为.NET框架提供了许多好的选择。例如。

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

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

        3
  •  0
  •   Meta-Knight    15 年前

    大多数时候,我使用CSTR、CINT、CBOOL和CTYPE,因为它较短且易于阅读。可能会有轻微的性能成本,但大部分时间并不重要。不过,了解ctype、trycast、directcast和其他类型之间的区别是很好的。